【问题标题】:How to make sure that a variable is posted from a specific JavaScript page in PHP如何确保变量是从 PHP 中的特定 JavaScript 页面发布的
【发布时间】:2011-07-06 05:08:43
【问题描述】:

有些任务只能由 JavaScript 完成。

我的问题是,从 JavaScript 完成任务后,JavaScript 代码必须将变量发送到 PHP 页面,据我所知,它只能通过 post、get 和 cookie 来完成,这意味着用户可以可能伪造变量并提交它。

我想确保 PHP 页面接收到的变量来自 JavaScript 页面。 到目前为止没有运气。解决办法是什么?

【问题讨论】:

  • 你描述的不可能。您可能应该做的是在服务器上确定有效值是什么,然后验证提交的值是否在该列表中;如果不是,则拒绝它。
  • 或者也可以使用验证码之类的...
  • 无论您在客户端过程中进行多少验证和混淆,在某些时候您都必须接受足够专门的恶意用户可以/将伪造数据。问题是弄清楚什么是“足够”,之后增加的复杂性超过了安全性所能实现的任何收益。花费 100 美元来保护 0.01 美元的资产并不划算。

标签: php javascript ajax lamp


【解决方案1】:

您可以在提供页面时生成真实性令牌。然后检查响应是否包含相同的真实性令牌。 A la rails.

【讨论】:

    【解决方案2】:

    正如其他答案所说,白名单确实是您唯一可以做的事情 - 如果有人故意攻击您的网站,则不需要您获得的任何内容都是有效的。

    由于攻击者不需要使用浏览器来做坏事,因此没有多少客户端验证或 cookie 起作用。

    【讨论】:

      【解决方案3】:

      如果您能描述您的具体场景以及您需要避免什么样的数据输入,我们可以为您提供更好的帮助。

      一般而言,您应该始终尝试在客户端 (JavaScript) 上验证数据,以便为用户提供更好的反馈(例如突出显示留空的必填表单字段)。认为这只是对用户的一种礼貌。

      无论如何,您都应该从不相信来自浏览器的数据,并在服务器上进行所有安全相关的验证,不要关心什么样的客户端软件已用于收集该数据(即您的 JavaScript 代码或一些硬编码的 GET/POST 数据)。

      【讨论】:

        【解决方案4】:

        你是对的,这肯定是个问题。

        将来自客户端的输入列入白名单/验证可以解决您的一些问题,方法是确保该值至少在可接受值的某个范围内。

        您关注的具体用例是什么?如果我们对您的场景有更多了解,或许我们可以为您提供更多帮助。

        【讨论】:

        • 如何将 javascript 变量列入白名单?在任何可能的情况下都不可见吗?
        • 一个 js 文件将嵌入到第三方网页中,该网页将从主机页面中检索变量。然后这些变量将被发送到一个 php 页面,该页面会将变量保存到 db。我想出了几个想法,但如果有人知道内部原理,它们仍然可以利用。
        • 白名单的意思是只接受某些变量。如果您正在寻找输入“fruit”的表单,那么您将接受“orange”、“banana”和“apple”,但丢弃“
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-04
        • 2010-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多