JavaScript-如何防止javascript代码被攻击?

JavaScript-如何防止javascript代码被攻击?

虐人心 发布于 2017-03-07 字数 408 浏览 1128 回复 5

我现在很多的前台页面会利用json来获取后台的数据,但是可能会被攻击者在其恶意站点的页面中通过javascript标签调用被攻击站点的一个 JSON 动态数据接口,再比如说cookie,前台页面使用 javascript创建或修改站点的 cookie,那么攻击者就可以查看到这些代码,通过阅读代码了解其逻辑,甚至根据自己所了解的知识将其用来修改 cookie,现在ajax,和第三方库也被广泛利用,大家平常再利用javascript修饰前台效果时,如何防止被攻击的?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

甜柠檬 2017-10-27 5 楼

其实到于前端来说,最主要是就是数据传送过程中的安全,如果涉及到敏感数据,最好是服务器端的客户端建立token验证。而对于Cookie来说,前端最好不要把敏感数据放在Cookie里,如果一定需要,那一要将Cookie通过加密后进行存储。

瑾兮 2017-09-25 4 楼

永远不要信任客户端传来的任何数据,即使那些数据是你自己生成的。总是对这些数据做第二次验证。尽可能地将数据存在SESSION变量和数据库里面,在客户端只保留标识ID。永远不要相信任何加密手段可以让你的数据不被人破解。即使他们无法破解你的加密算法,他们也可以用以前生成的数据来伪造新的数据。

永远不要信任Referer。不要依赖Referer头来做接口的访问控制,它只能承担防盗链的任务。攻击者不会因为缺少一个Referer而停滞不前。

永远不要以为你的某个接口不会被人发现。即使你没有从页面里链接到,也会有某些软件可以扫描出常用名命名的文件。任何敏感接口都要加上权限保护。

总是在你的AJAX、JSONP接口甚至所有的能造成操作的页面(包括“删除帖子”之类的链接、提交数据表单、AJAX POST等等)中增加一个Token参数,这是防范CSRF攻击的关键:这个参数是在用户第一次访问创建Session的时候随机生成的一个字符串,以后每次调用相应的接口,都必须附上这个参数。服务器端将提交的参数和Session中保存的数据比较,只有当数据相符时才执行相应的操作。对CSRF攻击者来说,跨域访问是受限的,无法获取Token,也就无法利用script或者img标签来调用特定的接口。
Token一定要和脚本文件分开传递。在每一页的head标签中这样写:
<script type="text/javascript">
var token = <?php echo $_SESSION['token']; ?>
</script>
<script type="text/javascript" src="mycode.js"></script>
如果在mycode.js里面传递token,token将变得毫无意义:攻击者可以在其他网站里面跨域引用你的mycode.js然后光明正大地调用你的接口。而且动态的js在缓存性能上也有下降。

除非需要跨站调用,否则不要使用JSONP接口。那个接口就是为了跨站调用而设计的。

最不受重视的大约就是CSRF漏洞了吧。有些网站可能会这样设计:
<p>帖子内容...</p>
<p><a href="delete?id=0232232">删除</p>
只有有管理员权限的才会显示删除标签,而且delete页里面也通过Cookies和SESSION判断了当前用户的权限,表面上看起来没啥问题。但其实攻击者可以诱使某个具有管理员权限的人去访问另一个网站,其中包含了这样的代码:
<img src="http://somebbs.com/delete?id=0232232" height=0 width=0/>
有管理员权限的人打开网页的时候,就会自动执行了删除操作。这就造成了CSRF攻击。
如果采取了前面的措施,链接会变成:
<p><a href="delete?id=0232232&token=xdfedsae232">删除</p></p>
攻击者无法预知其他人访问时返回的token是什么,也就无法构造攻击链接。

利用提交表单的POST接口并不比链接安全:
<p>帖子内容...</p>
<p><form action="delete"><input type="hidden" id="0232232"/><button type="submit">删除</button></form></p>

攻击者可以构造这样的页面:
<p>新年抽奖送IPhone!<form action="http://somebbs.com/delete"><input type="hidden" id="0232232"/><button type="submit">试试手气</button></form></p>
如果有管理员权限的人点了按钮也同样会造成CSRF攻击。

AJAX接口不仅可以用AJAX来调用,正常访问一般也是可以的。所以AJAX接口同样会有CSRF漏洞,同样需要Token参数。

偏爱自由 2017-07-18 3 楼

这里有几条防范对策:

您可以使用SSL来产生一个安全通道,并且只通过HTTPS连接来传送验证cookie。这样攻击者是无法解密所传送的cookie的。
设置cookie的过期时间,对所有的cookie和seesion令牌也这样做。这样可以减少被攻击的机会。
防范跨站代码攻击,因为它可以在用户的浏览器触发任意代码,这些代码可能会泄露用户的cookie。
在cookie有变动的时候验证cookie的内容。

泛泛之交 2017-06-09 2 楼

后台生成JSON 动态数据接口,这个要进行请求来源判断,比如请求url、ip、或者接收加密串通过自己独立的解密算法验证等。

至于前台处于安全考虑,js最好别创建cookie,只能读取cookie。用服务器脚本创建cookie!

虐人心 2017-04-03 1 楼

我觉得尽量不要在前台利用js操作那些比较关键的数据。你用ajax取后台数据,在后台程序里一定要加ip限制,cookie里尽量不要存与用户权限相关的数据,另外cookie里的数据一定要加密,你还可以定期更改加密算法,另外推荐给你个工具AppScan,这个工具可以帮你检测js中的问题。