2017-05-04 103 views
1

我知道这是一个广泛的问题,但我想我在这里错过了一些东西。简单地使用inspect元素并编辑javascript和html,攻击者是否有可能造成网站损坏?例如,有人很容易改变输入的最大长度,并上传太多的数据以至于可能导致服务器崩溃,我知道在服务器上检查数据总是一个好习惯,但它仍然看起来太简单了。或者另一个更具潜在危险的例子是,如果攻击者可以混淆$.ajax调用并向服务器发送不良信息。在攻击者的浏览器上,我应该更多地担心还是仅仅是暂时的变化?攻击者是否可以使用检查元素?

+0

答案是肯定的。 – wOxxOm

+0

他们根本不必使用网络浏览器。他们可以抛出他们想要在您的网站上的任何地狱网络请求,这可能看起来不像在正常使用中会发生什么。您必须为看起来像几乎任何事情的请求做好准备。 – user2357112

回答

1

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

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

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

一些例子:

  • 在过去,一些购物网站将包括支付为形式的隐藏字段中输入金额。在更改此值的同时,仍然批准交易时更改了信用卡收取的金额。
  • 带有Javascript验证规则的网站,可以通过直接发布到后端服务,直接发布自己的SQL和HTML/Script注入攻击来跳过。
  • 下拉菜单,单选按钮和复选框输入可以将意外值添加到表单中。
+0

添加到Trevor的回复:通过了解网站在实践中被攻击的方式,海报将会受益。几乎每个黑客都使用[打嗝套件](https://vimeo.com/148320460)。 – TheGreatContini

+0

好的,所有这些答案都吓我一跳!我想我需要非常小心服务器端验证。很好的答案btw! –

0

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

0

是的,他们可以。当他们检查元素时,他们可以在本地修改所有内容,所以它会对本地环境进行临时修改,但是他们可以修改可能影响服务器的值。

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

另一个典型的例子是一些领域,在那里你假设用户将只能提交数值,所以在后端,您使用的号码与您的查询,例如,像

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

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

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

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

这看起来很简单,但人们会犯错误。一个简单的例子是“心脏出血”错误,其中所有可能通过验证请求的长度而避免,而不是信任用户提交的数据。

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

相关问题