【问题标题】:Form validation with PHP and Javascript security使用 PHP 和 Javascript 安全性进行表单验证
【发布时间】:2010-08-09 07:37:04
【问题描述】:

我想知道是否真的有必要同时在 JS 和 PHP 中进行验证? 我的提交按钮带有 JS document.myform.submit()sending 和 PHP POST 到同一页面。 如果用户禁用 JS,他无论如何都无法发送表单。 所以我想问一下安全性,有人可以绕过javascript以另一种方式发送变量吗?他们将如何做到这一点? 如果可以的话,如果我也应该在 PHP 中进行验证,答案是肯定的,对吧?

【问题讨论】:

  • 只是个人意见 - 您可以考虑允许不使用 javascript 提交。就个人而言,我运行了一个允许运行 javascript 的站点的白名单。出于礼貌,您的 javascripted 表单可以告诉我是否在提交之前输入了错误的值。但是由于 javascript 被阻止,尽管我可以在客户端更改您的 webform 行为或使用套接字调用来完全绕过表单,但我完全无法作为普通用户使用您的网站。

标签: php javascript validation


【解决方案1】:

答案很简单。
服务器端是强制性的,必须无条件地完成。

客户端验证是可选的,只是为了方便用户。

因此,双方验证不是必需的,但为了可用性起见,首选

如果用户禁用 JS,他无论如何都不能发送表单。

哈哈。用户可以将您的表单保存在他们的本地磁盘上并以他们想要的方式进行编辑。

【讨论】:

    【解决方案2】:

    是的,例如,有人可以在 python 中使用urllib2 发送变量。这很容易做到。如果您只打算进行一组验证,请在服务器端进行。在客户端做这件事只不过是对你的用户的一种礼貌。

    举个简单的例子:

    import urllib2
    
    variables = {'variable1': value1, 'variable2': value2}
    urllib2.urlopen('http://yoursite.com/index.php/yourform', variables)
    # your form has now been spoofed.
    

    添加标头和 cookie 管理来欺骗任何用户代理同样简单

    【讨论】:

      【解决方案3】:

      始终在服务器端进行验证。 javascript 验证很不错,但很容易绕过。 攻击者可以伪造一个带有恶意数据的 HTTP POST 请求到您的表单 URL,然后进入您的系统而未经处理。

      【讨论】:

        【解决方案4】:

        正如每个人都回答的那样 - 永远不要只依赖客户端验证。这很容易被滥用,甚至不必将您的网页保存到磁盘,他可以使用 libcurl 或任何其他 HTTP 库,或者只是玩 Firebug 等。

        不过,客户端的验证非常“用户友好”。您可以在表单中添加 Ajax 验证,这仍然只是方便,应该依赖服务器端代码。

        【讨论】:

          【解决方案5】:

          我完全同意以上每个人的观点——客户端主要是为了让填写表格的人受益。服务器端更多的是确保您没有成为目标。

          如果您想要一个漂亮的客户端验证脚本,我已经编写了一个 - 免费下载和使用并且非常可定制。它甚至会捕获拼写错误的电子邮件地址并建议正确的版本。如果您有兴趣,可以在这里获取:

          http://www.blackboxtechnology.co.uk/free-stuff/javascript-form-checker.php

          享受吧!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-11-23
            • 1970-01-01
            • 2010-12-16
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多