我有一个表单用户填写,JavaScript用于验证输入(例如,确保密码字段不是空白)。由于JavaScript是客户端而没有编译,任何人都可以轻松搞砸它。这是否意味着在服务器上再次验证来自用户的数据是否必要?如果是的话,有没有它可以提高效率,因为JavaScript(理论上)已经做到了?
答案 0 :(得分:6)
是的,有必要验证服务器上的数据,因为它可能被最终用户客户端搞砸。
如果是的话,有没有它可以提高效率,因为JavaScript(理论上)已经做到了?
它比仅使用服务器端验证更有效,因为您通过客户端验证避免了大量的验证往返(您只需要提交一次数据,除非验证不完整或已禁用,它将通过直接)。提供更好的用户体验。
您无法取消服务器端验证(如果您关心数据)。如果数据只返回给同一个用户并且没有在其他地方显示或使用(并且没有可能破坏系统上的任何内容),那么您可以稍微放松一下。作为极端的例子,Dropbox可能并不关心您上传的文件,因此他们不会验证您上传的HTML是否包含恶意Javascript。
答案 1 :(得分:2)
我只需点击鼠标就可以禁用页面上的任何JavaScript。我甚至可以完全绕过HTML表单并将数据直接发送到您的服务器。
例如,如果您使用$_GET
检索数据,我可以通过弄乱地址栏来绕过您的表单(以及javascript验证)。不要以为使用$_POST
会改变这种情况:只需编写HTTP请求即可。
所以,是的......永远不要相信用户输入,即使用javascript进行消毒。
正如上面发布的那样,javascript验证可以防止合法的用户错误(从而节省了错误的数据会对您的服务器然后又回到用户的行程),但恶意用户仍然可以绕过它非常很容易。
答案 2 :(得分:2)
简短回答:是的,永远!
阅读有关PDO,SQL注入,UUID,令牌,MD5,SHA,跨站点请求伪造...您有一个全新的世界可以发现! :)我的意思是好的方式。了解这一点,您将建立更安全的网站
您始终需要牢记这一点:绝不相信用户输入数据。决不。因此,您必须在服务器端执行额外的验证过程。
答案 3 :(得分:1)
绝对是的。在重新发布到服务器之前,某人仍然可以截取表单并修改值。
答案 4 :(得分:1)
用户当然可以禁用JavaScript。它也很容易搞乱,因为源代码就在那里。用户还可以运行任意JS,使得更容易弄乱你的东西。
因此,您应该始终进行服务器端验证。客户端验证应仅用作用户的方便信息。永远不要相信它是您唯一的安全来源。
答案 5 :(得分:1)
是的,您必须在客户端和服务器端验证。 你必须考虑逐步增强。将Javascript视为增强层而非必需品。因为用户可以自行决定在浏览器中禁用Javascript,导致您的Javascript代码无效。
客户端验证的一个优点是,您正在向服务器保存往返,验证用户名或密码是否为空,这可以通过javascript轻松完成。
答案 6 :(得分:0)
是的,为了安全起见,您需要添加服务器端验证 预计客户端无法做任何事情,因此您需要重复任何重要的事情 此外,有些东西可能会在服务器端进行评估,但不会在客户端进行评估。 SQL注入检查等问题属于这一类。