2010-08-09 42 views
0

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

+0

只是个人观点 - 您可以考虑允许在没有javascript的情况下提交。就我个人而言,我运行允许运行javascript的网站白名单。作为礼节,您的javascripted表单可以告诉我,在提交之前是否输入了错误的值。但是,在javascript被阻止的情况下,尽管我可以改变你的webform行为客户端或者使用套接字调用来完全绕过表单,但我完全不能使用你的网站作为普通用户。 – 2010-08-09 09:33:58

回答

1

是的,有人可以使用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管理欺骗任何用户代理是一样琐碎

0

在服务器端始终验证。 JavaScript验证很好,但可以轻松绕过。 攻击者可以伪造带有恶意数据的HTTP POST请求到您的表单的URL,然后该URL将被无标注地输入您的系统。

3

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

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

因此,确认双方是没有必要的,但首选的可用性

如果用户禁用JS的缘故,他不能继续发送形式。

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

0

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

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

0

我完全同意上面的所有人 - 客户端主要是为了填表人。服务器端更多的是确保你没有被定位。

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

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

享受!