目前我开发了一个用于处理金融交易的网站。我看到我的一些客户已经完成了JavaScript注入攻击并完成了一些不可能的事务。作为一个例子,我在下订单之前检查了他的现金余额。但其中一些确实通过在地址栏中运行以下javascript来改变它。他们通过查看页面源来获取可变名称。
javascript:void(document.accounts.cashBalence.value="10000000")
由于这很关键,我想快速修复它。那么有没有办法防止JavaScript注入攻击?
答案 0 :(得分:30)
您可以对变量名称和/或值进行模糊处理或哈希处理。然而,
不要使用JavaScript,而是在服务器端执行每个逻辑。
答案 1 :(得分:8)
最后它甚至不是Javascript的问题。您的服务器使用HTTP与外界通信。它使用HTTP发送数据并使用HTTP接收数据。任何人都可以使用HTTP从中请求数据,任何人都可以使用HTTP向其发送数据。
再想一想:
任何人都可以通过非常简单的HTTP协议将数据发送到您的服务器。
您发送给人们浏览器的HTML和Javascript只是一个很好的帮助,一个接口,可以让他们轻松地将数据发送到您的服务器。他们可以在命令行上使用curl
命令,或者通过telnet
进入端口80并对它进行低级别的操作。
如果您的服务器盲目地遵守发送给它的任何和所有命令而未检查其有效性,那么您 无安全性 无论如何。安全性和有效性检查属于服务器,而不是客户端接口。因为HTML和Javascript不是服务器的唯一接口,它们也不以任何方式受到保护,因此也值得信赖。
答案 2 :(得分:7)
Javascript在用户的浏览器中运行。你最终无法控制它,不应该相信它。您在浏览器中进行的任何验证仅仅是为了方便用户,因此可以尽早向他们发出问题提示。
接受订单的后端代码应对用户的余额进行权威检查。
答案 3 :(得分:1)
没有客户端脚本(包括Javascript)可用于验证,它应该都在服务器端完成。
如果是财务记录,那么特别信任它太不可靠了!!
它应该用于更好的“用户体验”。在打字时进行表格验证或其他什么,但不是这个!
答案 4 :(得分:0)
已经发现,如果你只到服务器那里除了输入数据而不是传入数据它最好但是这会带来问题,如果你使用一个网站在连接的客户端上接受用户输入那么你的preaty很多搞砸我建议一个简单的java脚本行,它可以在你发送任何java脚本之前将它带到哪里,你必须输入一组基本的变量,所以只需要一个登录页面就可以开始这样的事情
System.out.printin ("Welcome, Would you like to login to edit?")
然后{System.in =“是”}
答案 5 :(得分:-2)
为防止Javascript注入,只要您允许用户输入内容,就应该有验证功能。尝试使用库来确定输入到表单的Javascript脚本。
同样在显示用户输入时,您应该转义文本按原样显示,并且不会被浏览器评估。
利用您的服务器,无论是否使用Javascript,您都应该将业务逻辑放在服务器而不是客户端。发送到客户端的所有数据都只是查看,不应处理任何业务逻辑。