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

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

@TheTXI

我很高兴你惊讶我只是不想留下任何可能改变某人回答给我虚假信息的东西。


似乎很多人都触及到我所追求的,但是阿贾克斯的一部分应该留在我的问题中,因为这是最重要的部分。

不过,阅读post,我知道一个坏人可以轻松地加载萤火虫,并更改我的button,提交button,并发表一篇文章。 或者以其他方式。

浏览器/客户端validation是一个方便。 你不能依靠它。 您绝对需要通过服务器端validation来复制任何客户端级别的validation。

好吧,所有的代码都是正确的。 当黑客用自己喜欢的方式replace你的JavaScript时,会发生什么?或者只是简单地提交POST和GET,就好像它是你的代码一样?

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

在USAGE点validation是一个安全问题。

最后一点非常重要,因为如果您不在使用的地方进行validation,则会使代码高度耦合。 如果你改变一个模块,它会在别的地方把事情弄坏,因为你在错误的地方进行了validation。

例如,在存储到一个SQL数据库之前,您将针对SQL注入的数据进行validation – 如果您select了一个好的数据库,该库将为您执行此操作。 当您将数据显示为HTML时,您将validation数据。 但是,如果将数据作为XML,RSS或JSON公开,那么validation是不同的 – 如果仅在input时validation它,则不会阻止其他格式的利用,并且您的input例程将与输出绑定您select的格式。

我总是把它视为

  • 客户端validation是为了可用性
  • 服务器validation是为了安全。

是的,你应该总是做服务器端validation。 Javascript / AJAX很好给用户提供即时的反馈,但是在服务器端并没有给你任何保护。

你不能相信用户input。 JavaScriptvalidation太容易绕过。 因此,您需要检查服务器端的input。

总之是的。 你永远不能依靠浏览器发送给你的是合法的。

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

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

因此,有必要进行服务器端validation。

实际上,服务器端的validation是必须的 ,客户端是好的,但可选的。 那是因为你完全不能控制客户端发生的事情。

更糟糕的情况是构build了一个定制的浏览器,这使得您的客户端validation无能为力。 这与使用URL来传递敏感信息确实没有什么不同 – 对于某人来说,这是很容易的,因为他们可以轻而易举地完成自己想做的事情(例如更改订单上的定价信息,或者通过更改用户标识来绕过安全性)。

对服务器端进行validation是非常重要的,因为用户可以closuresJavaScript,或者直接向服务器端处理程序提交所需的任何数据,因为他们不必使用JS增强的表单来提交数据。

我一直认为客户端/ JavaScriptvalidation作为UI增强,服务器端validation为“实际”validation。 有JSvalidation是很好的立即通知不正确的数据,以帮助您的用户。

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

是的,你仍然需要做validation服务器端。 一个AJAX文章仍然只是一个POST。 有人可以很容易地写一个页面,做一个坏的数据POST,或者甚至更容易使用像Firefox中的Tamper Data插件这样的工具来在Javascriptvalidation它之后更改数据。

我认为你应该做客户端和服务器端validation是安全的。 你可以在客户端进行大量的validation,但是如果有一些绕过validation,那么你就会面临很大的问题。 而在服务器端进行validation,则可以保护您免受此类攻击

如果你不在服务器上validation,有人会用Firebug覆盖你的客户端validation,或者用另一个名为Poster的Firefox扩展来完成。 祝你好运清理你的数据库!

客户端validation只是为了让用户知道他们立即搞砸了。 这并不意味着什么。

是的,客户端可能会发生任何事情,您不应该将其作为validation的主要forms。 您不希望不良数据进入数据库或未经检查的条件可能导致的潜在安全问题。 它可以取决于function的types,但是你应该在两边进行validation。

对于基本上相同主题的其他激烈辩论,请参阅Flex中的安全性 – 是否可以操纵下载的代码并执行Web服务 。

绝对做两个。 客户端validation适用于简单typesvalidation(例如,它是否匹配正确格式的电子邮件地址),但由于您无法确保您的数据来自您的页面(表单欺骗是常见的黑客攻击),您应该始终在服务器端。

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

虽然这种策略适用于合法的用户,但它不会保护您的网站免受非浏览器请求,使用一些黑客工具或一系列自动机器人请求发送HTTP POST命令与垃圾满负荷在最好的情况下只是污染你的系统,在最严重的损害你的数据一致性,这将导致多个页面上的错误消息。

客户端validation违反了“万维网”的概念,因为我们制作html文本的原因是因为每个设备必须能够处理rsponce,但是设备却很小。 现在,客户端validation需要使用的设备的处理能力,这不是“www”从使用html的设备所期望的。 客户端validation对节省带宽尤为重要,因为互联网速度日益增加,我们不再需要客户端validation。