我知道这是一个广泛的问题,但我想我在这里遗漏了一些东西。通过简单地使用inspect元素并编辑javascript和html,攻击者是否有可能对网站造成损害?例如,某人似乎很容易改变输入的最大长度,并上传如此多的数据以至于可能导致服务器崩溃,我知道在服务器上检查数据总是好的做法,但它似乎仍然太容易了。或者另一个更具潜在危险的例子是,攻击者可能会遇到$.ajax
电话,并向服务器发送错误信息。在攻击者浏览器上,我应该更担心或者这些变化是暂时的吗?
答案 0 :(得分:1)
这些更改在个人用户的浏览器中是暂时的。
但是,更改将允许该用户与您的后端进行交互,但他们选择这样做。这是网站受到攻击的一种方式。
标准规则是永远不要信任来自用户/浏览器的输入。不要相信隐藏字段的价值,不要相信他们没有改变长度,不要相信他们没有添加新值(例如下拉),不要相信任何已经在Javascript中完成的验证,等
一些例子:
答案 1 :(得分:1)
是的,他们可以。当他们检查元素时,他们可以在本地修改所有内容,因此它将对其本地环境进行时间修改,但是他们可以修改可能影响服务器的值。
例如,假设您有一个在线商店,并且您有一个“编辑产品”选项。一旦你去那里,你有一个隐藏的字段,你存储产品ID,这样当你尝试在后端更新该产品时,你将使用该ID来知道要更新的产品。攻击者可以轻松更改该值,现在他将能够修改任何其他产品(包括不属于他的产品)。
另一个经典示例可能是数字字段,您假设用户只能提交数值,因此在您的后端,您在查询中使用该数字,例如
"SELECT * FROM Products WHERE Price > " + Price;
您期望得到一个数值,因此您认为攻击者无法为SQL注入发送文本,但他可以轻松修改该值(通过更改文本输入的数字输入,修改发送之前的javascript值,或拦截网络流量并从那里修改值),现在你最终会得到类似的东西:
"SELECT * FROM Products WHERE Price > 0; DROP TABLE Products--"
这是您永远不应该信任用户输入的主要原因。你期待一个数值吗?然后在使用之前确保它是一个数字。您的用户是否正在更新产品?在更新产品之前,请确保产品确实属于他。你有数据的maxlength属性吗?仔细检查您的服务器,确保它仍然有一个有效的长度。
看起来似乎非常容易和简单,但人们会犯错误。一个简单的例子是“Heart Bleed”错误,通过验证请求的长度可以避免所有这些错误,而不是信任用户提交的数据。
这就是为什么您不需要信任用户提交的数据,并且始终在后端执行双重检查的主要原因。
答案 2 :(得分:0)
你应该担心这个。永远不要相信来自客户的输入。不要指望您在客户端执行的任何检查都是真正执行的。您始终需要检查服务器端的输入。 正如您已经提到的,用户可以使用各种检查工具来更改本地代码,或者只是手动完成恶意数据包的制作。
答案 3 :(得分:0)
是的,他们可以。他们可以看到您的代码,让他们有机会发现漏洞或制造漏洞并攻击漏洞。尽管这些编辑是暂时的,并且仅在攻击者的浏览器上进行,但它们可能会造成伤害。