如何防止JavaScript注入攻击

nat*_*ath 7 javascript

目前我开发了一个用于处理金融交易的网站.我看到我的一些客户已经完成了JavaScript注入攻击并完成了一些不可能的事务.作为一个例子,我在下订单之前检查了他的现金余额.但其中一些确实通过在地址栏中运行以下javascript来改变它.他们通过查看页面源来获取可变名称.

javascript:void(document.accounts.cashBalence.value="10000000")
Run Code Online (Sandbox Code Playgroud)

由于这很关键,我想快速修复它.那么有没有办法防止JavaScript注入攻击?

Min*_*ang 30

您可以对变量名称和/或值进行模糊处理或哈希处理.但是,
不要使用JavaScript,而是在服务器端执行每个逻辑.

  • @RPM说一些事情很好,**只要你检查你所说的有效性.**; o) (11认同)
  • + 10k谁可能认为将关键业务逻辑留在客户端的计算机上而不检查服务器是个好主意? (10认同)
  • 可以*使用*javascript,但仅限于客户端的UI逻辑和完整性检查**.服务器应该*不信任*. (8认同)
  • @RPM进行AJAX调用也很好,**只要服务器检查并仔细检查这些调用的有效性.** (3认同)
  • @RPM银行网站上的Javascript很好,**只要它只用于增强界面.** (2认同)

dec*_*eze 8

最后它甚至不是Javascript的问题.您的服务器使用HTTP与外界通信.它使用HTTP发送数据并使用HTTP接收数据.任何人都可以使用HTTP从它请求数据,任何人都可以使用HTTP向它发送数据.

再想一想:
任何人都可以通过非常简单的HTTP协议将数据发送到您的服务器.

您发送给人们浏览器的HTML和Javascript只是一个很好的帮助,一个接口,允许他们轻松地将数据发送到您的服务器.他们可以curl在他们的命令行上使用命令或者通过telnet进入端口80并对它进行真正低级别的操作来做同样的事情.

如果您的服务器盲目地遵守发送给它的任何和所有命令而不检查其有效性,那么您就没有任何安全性.安全性和有效性检查属于服务器,而不是客户端接口.因为HTML和Javascript不是服务器的唯一接口,它们也不以任何方式受到保护,因此也值得信赖.


Bra*_*ace 7

Javascript在用户的浏览器中运行.你最终无法控制它,不应该相信它.您在浏览器中进行的任何验证仅仅是为了方便用户,因此可以尽早向他们发出问题警报.

接受订单的后端代码应该对用户的余额进行权威检查.