4

我知道这是一个广泛的问题,但我认为我在这里遗漏了一些东西。攻击者是否有可能通过简单地使用检查元素并编辑 javascript 和 html 来破坏网站?例如,某人更改输入的最大长度似乎太容易了,并且上传了太多可能导致服务器崩溃的数据,我知道在服务器上检查数据总是一个好习惯,但它似乎仍然太容易了。或者另一个更具潜在危险的例子是,如果攻击者可以扰乱$.ajax呼叫并将错误信息发送到服务器。攻击者浏览器上的更改是我应该更担心的还是只是暂时的?

4

4 回答 4

6

这些更改在个人用户的浏览器上是临时的。

但是,这些更改将允许该用户与您的后端交互,但他们选择这样做。这是攻击网站的一种方式。

标准规则是永远不要相信来自用户/浏览器的输入。不相信隐藏字段的值,不相信它们没有改变长度,不相信它们没有添加新值(例如,添加到下拉列表中),不相信在 Javascript 中完成的任何验证,等等

一些例子:

  • 过去的一些购物网站会将要支付的金额作为隐藏字段包含在表单中。更改此值会更改向信用卡收取的金额,同时仍会批准交易。
  • 带有 Javascript 验证规则的站点可以通过直接发布到后端服务来跳过,从而使自己容易受到 SQL 和 HTML / 脚本注入攻击。
  • 下拉菜单、单选按钮和复选框输入可以将意外值添加到表单中。
于 2017-05-04T21:12:16.913 回答
1

是的他们可以。当他们检查元素时,他们可以在本地修改所有内容,因此这将是对其本地环境的临时修改,但是他们可以修改可能影响您的服务器的值。

例如,假设您有一个在线商店,并且您有一个“编辑产品”选项。一旦你去那里,你有一个隐藏的字段,你可以在其中存储产品 ID,这样当你尝试在后端更新该产品时,你将使用该 ID 来知道要更新哪个产品。攻击者可以轻松更改该值,现在他将能够修改任何其他产品(包括不属于他的产品)。

另一个经典示例可能是数字字段,您假设用户只能提交数值,因此在您的后端,您在查询中使用该数字,例如,类似

"SELECT * FROM Products WHERE Price > " + Price;

您期望的是一个数值,因此您认为攻击者无法为 SQL 注入发送文本,但他可以轻松修改该值(通过更改文本输入的数字输入,修改之前的 javascript 值)发送它,或者拦截网络流量并从那里修改值),现在你可以得到类似的结果:

"SELECT * FROM Products WHERE Price > 0; DROP TABLE Products--"

这就是为什么你永远不应该相信用户输入的主要原因。你期待一个数值吗?然后在使用它之前确保它是一个数字。您的用户是否在更新产品?在更新之前确保产品确实属于他。你的数据有 maxlength 属性吗?仔细检查您的服务器以确保它仍然具有有效的长度。

这似乎是一件非常容易和简单的事情,但人们会犯错误。一个简单的例子是“Heart Bleed”错误,通过验证请求的长度而不是信任用户提交的数据可以避免所有这些问题。

这就是为什么您永远不需要信任用户提交的数据并始终在后端执行双重检查的主要原因。

于 2017-05-04T23:04:58.737 回答
0

你应该担心这个。永远不要相信来自客户的输入。不要期望您在客户端执行的任何检查都会真正执行。您总是需要检查服务器端的输入。正如您已经提到的,用户可以使用各种检查工具来更改本地代码或完全手工制作恶意数据包。

于 2017-05-04T21:07:44.103 回答
0

是的他们可以。他们可以看到你的代码,让他们有机会发现漏洞或制造漏洞并攻击漏洞。即使编辑是临时的并且仅在攻击者的浏览器上,它们也可能造成伤害。

于 2021-05-19T13:42:40.530 回答