Java防⽌Xss注⼊json_前端进阶,你必须要了解的安全问题之
XSS攻击
前端安全⼀直是⼀个⽼⽣常谈的话题,但是在实际的⼯作过程中,我发现⼤部分的前端同学对此了解不多,或者说知道⼀些但从没有在意识层⾯真正重视过。今天我们就来扒⼀扒前端到底有哪些安全问题,我们到底该以什么样的态度怎么去看待它。
在深⼊分析之前我们还是按照惯例先⼤概介绍下什么是XSS攻击。
XSS-跨站脚本攻击
跨站脚本(Cross-site scripting,通常简称为XSS)是⼀种⽹站应⽤程序的安全漏洞攻击,是代码注⼊的⼀种。它允许恶意⽤户将代码注⼊到⽹页上,其他⽤户在观看⽹页时就会受到影响。这类攻击通常包含了HTML以及⽤户端脚本语⾔。可通过页⾯执⾏脚本并请求外部服务器发⽣数据交互,从⽽达到攻击⽬的。
以上是我们从百度百科中摘取的⼀段对于XSS的描述,接下来我们通过⼀个实际的案例来具体说明下XSS到底是如何实现攻击的。
我们模拟⼀个表单提交和数据展⽰的逻辑。
前端代码:
从图中我们可以看到,我们在表单中输⼊了⼀串Javascript代码,接下来我们写⼀下相应的后台处理的逻辑。
Nodejs代码:
接下来我们看看提交数据后的表现:
浏览器窗⼝中弹出了⼀个窗⼝,⾥⾯显⽰1,这说明我们提交的代码在浏览器端执⾏了。在上述例⼦中我再服务端代码中省略了存储和查询的逻辑,这种攻击在XSS攻击中叫做存储型攻击,既然说到XSS的分类,我们就来总结⼀下XSS攻击都有哪些常见的类型。
1. 存储型攻击:⽐如上述的例⼦,数据提交后被存储到了⽹站数据库,当这篇内容被任意⽤户访问的时候即会出发脚本执⾏,达到攻击
的⽬的。⽐如⽤户发布⼀篇⽂章,⽂章中包含恶意代码,那其他⽤户在访问这篇⽂章时就会触发恶意代码执⾏。
2. 反射型攻击:恶意代码并没有存储在服务端,⼀般通过诱导⽤户点击来达到攻击的⽬的。
3. Dom-Based:有些客户端脚本可以对页⾯进⾏动态修改且不依赖服务端数据,⽽如果这部分数据包含恶意脚本且没有经过必要的过滤
处理的话,就有可能遭受Dom-based的攻击。
XSS攻击的危害
在上述的例⼦中,我们的恶意代码只执⾏alert语句,对客户端应⽤本⾝来说并不会造成多⼤的危害。但是我们可以设想⼀下,假如⼀个⽤户登录了某⽹站,⼀般来说我们会使⽤cookie来记录客户端与服务端的会话ID从⽽在后续的请求中保持登录状态。如果这个会话ID被恶意的JS脚本窃取,那攻击者就可以通过这个会话ID伪装成合法⽤户进⾏信息窃取。更有甚者,如果窃取的是某个应⽤的后台管理账号,那对应的危害之⼤可想⽽知。
我们结合XSS攻击的原理来总结⼀下XSS攻击的可能危害性:
会话劫持:窃取会话信息,伪造合法⽤户⾝份进⾏攻击(如修改⽤户密码,获取⽤户私密信息等);
java技术介绍百度百科钓鱼:通过动态修改⽹页内容来欺骗⽤户;
结合CSRF攻击:⽐如我们防御CSRF攻击⽤csrftoken,那如果这个token被窃取了呢?
如何防御
我们讲了这么XSS的原理和危害,那么我们在⽇常开发当中到底该如何预防呢?
1、安全意识
⽅法说得再说,不执⾏都是空话,所以解决安全问题的第⼀步是培养我们的安全意识:
学会敬畏:敬畏每⼀⾏代码、敬畏⽣产环境、敬畏⽤户;
不可信原则:要坚信任何输⼊都是不可信的,⽆论前端还是后端;
安全检查:针对常见安全漏洞制定测试计划,确保每⼀次开发都是有安全保障的;
2、输⼊输出过滤(XSS Filter)
XSS攻击的主要原理是注⼊恶意的脚本,所以我们对任何输⼊和输出⼀定要坚持不可信原则,常⽤的过滤⼿段有:HtmlEncode:转换后的⽂本将不会被浏览器当做html⽂档来解析执⾏,也就不会将script标签当做js语法来执⾏;
UrlEncode:对url中的参数进⾏编码,⽐如“
JavascriptEncode:常⽤的JavaScript编码函数为:escapeJavascript()。该函数的功能为:将 ‘ ” < > & # 这些个危险字符进⾏转义。
3、Cookie HttpOnly
如果攻击者是通过远程加载脚本来窃取cookie信息,那标记为HttpOnly的cookie可以通过浏览器的同源保护策略来阻⽌,因此通过劫持会话为⽬的的攻击⼿段也就失效了。
4、指定HTTP头中内容的类型(Content-Type)
在部分场景下,我们会通过异步请求的⽅式从服务端获取数据渲染到页⾯上,如果在开发过程中不够严谨,将请求的Response Header设置成了text/html,⽽返回的数据中恰好⼜包含恶意代码的话,那不好意思,你中招啦!针对这种情况,我们对数据返回的格式⼀定要明确并输出对应的数据类型来告诉浏览器⽤什么样的⽅式解析。⽐如json格式我们⽤application/json,纯⽂本类型⽤text/plain格式。
结语
好了,今天关于XSS的问题就讲到这了,你是否明⽩了呢?如果对安全这块还有疑问的话,欢迎关注私信我互相交流。后续针对其他安全问题都会在安全系列的⽂章中为⼤家⼀⼀讲解,希望能对⼤家的学习有所帮助!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论