你应该在服务器端进行验证吗?

时间:2009-07-14 14:28:25

标签: javascript ajax validation

你应该在服务器端进行验证,还是只在客户端进行验证?

@TheTXI

我很高兴你的惊讶我只是不想遗漏任何可能改变某人回答给我错误信息的东西。


似乎有很多人触及了我的目标,但Ajax的部分应该保留在我的问题中,因为这是最重要的部分。

然而,阅读我知道的帖子,看到一个坏人可以轻松加载萤火虫并将我的按钮更改为提交按钮并发帖。或者其他一些方式。

17 个答案:

答案 0 :(得分:91)

浏览器/客户端验证很方便。你不能依赖它。您绝对需要使用服务器端验证复制任何客户端级别的验证。

答案 1 :(得分:33)

嗯,很好,你的所有代码都是正确的。当黑客用他们喜欢的一个替换你的javascript时,或者只是简单地提交POST和GET就像你的代码那样会发生什么?

在客户端验证是一个可用性问题。

在USAGE点验证是一个安全问题。

最后一点很重要,因为如果您在使用时没有验证,那么您的代码就会高度耦合。如果你更改了一个模块,它会在其他地方破坏它,因为你在错误的点上进行了验证。

例如,在存储到SQL数据库之前,您可以根据SQL注入验证数据 - 如果您选择一个好的数据库,库将为您执行此操作。当您将数据显示为HTML时,可以根据CSS验证数据。但是如果您将数据公开为XML,RSS或JSON,那么验证就不同了 - 如果您仅在输入时验证它,则不会阻止对其他格式的攻击,并且您的输入例程将与输出相关联您选择的格式。

答案 2 :(得分:14)

我总是将其视为

  • 客户端验证是否可用
  • 服务器验证是为了安全。

答案 3 :(得分:8)

是的,您应该始终进行服务器端验证。 Javascript / AJAX很高兴为用户提供即时反馈,但它并没有在服务器端为您提供任何保护。

您无法信任用户输入。 Javascript验证太容易规避。因此,您需要检查服务器端的输入。

答案 4 :(得分:6)

简而言之。您永远不能依赖浏览器发送给您的内容是合法的。

答案 5 :(得分:3)

实际上,服务器端验证是必须,客户​​端是好的但是可选的。那是因为你完全无法控制客户端发生的事情。

更糟糕的是,构建了一个自定义浏览器,使您的客户端验证变得无能为力。这与使用URL传递敏感信息实际上没什么不同 - 有人可以轻松地将URL设置为他们想要的(例如更改订单上的定价信息或通过更改用户ID绕过安全性)。

答案 6 :(得分:3)

进行服务器端验证绝对必要,因为用户可以关闭JavaScript或只是将他们想要的任何数据提交给服务器端处理程序,因为他们不必使用JS增强的表单来提交数据。

我一直认为客户端/ JavaScript验证是一种UI增强,服务器端验证是“实际”验证。通过JS验证可以立即通知不正确的数据,以帮助您的用户。

答案 7 :(得分:3)

可能会绕过客户端验证 - 如果您没有服务器端验证,则最终会处理或保存无效或错误的数据。

以上可能是因为浏览器问题,例如您不支持的某些浏览器版本。或者更糟糕的可能是恶意用户。

因此,必须进行服务器端验证。

答案 8 :(得分:2)

是的,你还需要做验证服务器端。一个AJAX帖子仍然只是一个POST。有人可以轻松编写一个用错误数据执行POST的页面,甚至可以更轻松地使用Firefox中的Tamper Data插件等工具在Javascript验证后更改数据。

答案 9 :(得分:2)

除了关闭Javascript的用户问题外,服务器端验证对于安全性也是必需的。除了检查必填字段之外,您还需要检查用户提供的数据以防止SQL注入攻击,跨站点脚本等。您必须在服务器端执行此操作,因为用户始终可以绕过Javascript并发送他们想要的任何数据。

答案 10 :(得分:1)

如果您未在服务器上进行验证,则有人会使用Firebug覆盖您的客户端验证,或者使用另一个名为Poster的Firefox扩展程序完全绕过它。祝您清理数据库好运!

仅进行客户端验证,以便用户知道他们立即搞砸了。它无意保护任何东西。

答案 11 :(得分:1)

我认为您应该进行客户端和服务器端验证才能安全。您可以在客户端上进行大量验证,但是如果有人绕过验证,那么您就会遇到大问题。然而,在服务器端进行验证也可以保护您免受

的影响

答案 12 :(得分:1)

是的,客户端可能会发生任何事情,您不应该相信它是主要的验证形式。您不希望错误数据进入数据库或未经检查的条件可能导致的潜在安全问题。它可能取决于功能的类型,但您应该双方都进行验证。

答案 13 :(得分:1)

关于什么是基本相同的主题的额外激烈辩论,请参阅Security in Flex – is it possible to manipulate downloaded code and execute web service

答案 14 :(得分:1)

绝对两者都做。客户端验证适用于简单类型验证(例如,这与正确格式化的电子邮件地址匹配)但由于您无法确保您的数据来自您的页面(表单欺骗是一种常见的黑客攻击),您应该始终在服务器端。

此外,服务器端验证允许您在将数据提交到数据库之前对数据进行更全面的业务逻辑检查。

答案 15 :(得分:1)

虽然此策略适用于优秀的合法用户,但它不会使用某些黑客工具或一系列自动机器人请求来保护您的网站免受非浏览器请求的影响,该请求会发送HTTP POST命令,其中包含完整的垃圾邮件。最好的情况只是污染你的系统,最严重的损害你的数据一致性,这将导致多页错误消息。

答案 16 :(得分:0)

客户端验证违反了“万维网”的概念,因为我们制作基于html文本的原因是因为每个设备必须能够处理rsponce,无论设备是多么小。现在,客户端验证要求使用的设备的处理能力不是“www”对消费html的设备的期望。客户端验证对于节省带宽特别重要,因为互联网速度日益增加,我们不再需要客户端验证。