我一直在想,onClick标签是如何安全的(以及其他标签)?我的意思是,任何人都可以在触发onClick时放置他们想要执行的任何javascript,是什么阻止某人注入恶意代码?
答案 0 :(得分:3)
浏览器客户端本质上是不安全的。这是一个完全不安全的执行环境,你无法以任何方式真正保护它。
考虑这一点的方法是你不控制浏览器中发生的事情。可以在任何浏览器中注入,修改或运行各种代码(通过bookmarklet,控制台,直接DOM操作,包括添加任意onclick
处理程序,代理修改,调试工具等...)。所以,你的客户本身就是不安全的。一旦您接受浏览器基本上不安全,就可以更容易地理解您需要在服务器上执行的操作。
这就是为什么您必须验证并清理从客户端到达您服务器的任何结果的原因。您必须在服务器上执行此操作,以防止错误数据进入您的服务器。您不能相信发送给您的任何数据是正确或有效的。相反,您必须在使用它之前在服务器上完全验证它。
您几乎可以将其视为任何表单提交或Ajax调用或带有查询参数的URL或您的服务器接受的结构化URL是对您的服务器的API调用,您不知道谁在使用该API以及他们是否使用是否正确使用它。因此,在您自己在服务器上检查数据或请求是否有效之前,您必须对数据或请求的有效性一无所知。
仅供参考,有各种技术,例如"数据或功能隐藏在闭包",代码遮蔽等等......这使得某人更难以弄乱你的Javascript的某些部分。但是,重要的是要理解这些只是确定或熟练的黑客的临时障碍,并不提供实际的安全性,不应该依赖于安全性。熟练的黑客可以用他们自己的修改版本替换你的整个Javascript,这几乎意味着你无法在你的客户端Javascript中做任何事来保护它。
答案 1 :(得分:2)
绝对没有什么能阻止客户端运行恶意javascript或使用其他开发人员工具。 (例如,添加表单元素)
这就是你保持服务器端脚本安全的原因。 (消除用户输入等)
答案 2 :(得分:1)
问题通常不是单个用户是否可以在自己的计算机上在自己的浏览器中运行任何JS。
问题在于,当您被允许将该脚本保存到数据库而不先清理它时,它会在页面上呈现,供其他人查看和执行。然后,突然间,他们可以在其他人的机器上执行代码,窃取他们的详细信息等等。
换句话说,如果您允许用户在其评论中指定HTML标记,并且您没有搜索<script>
标记,onclick
属性等的标记并在之前将其删除你将它保存到数据库,然后你有一个潜在的问题。当您从数据库中获取保存的标记并将其显示在某个页面上而不删除任何与JS相关的功能时,它就会成为一个实际问题。
答案 3 :(得分:1)
没有保护。从开发人员控制台/检查元素,您可以修改标记中的代码。但是,只有您可以看到在inspect元素中进行的修改,它们不会永久保存。因此,访问该站点的其他用户无法看到您在开发人员控制台中输入的代码。
是什么阻止制作页面的人将恶意代码放入onclick
?嗯,在javascript中使用真正危险的代码是不可能的,网站可以对计算机做的最糟糕的事情就是崩溃浏览器。所以javascript非常安全。