转自:https://mp.weixin.qq.com/s/yz5S4hCGFkJajSpbaLgu6g 对应的xss攻击模块
谈谈你对XSS攻击的理解面试官视角分析 XSS是web安全方面最常见的一种攻击方式。
首先,这个词实际上是CSS(Cross Site Scripting)---跨站脚本攻击。但它与CSS同名,所以改名为XSS。
基本原理是将一段JavaScript代码注入网页。
然后当其他用户访问该页面时,他们将运行黑客编写的JS代码来获取账户信息,从而实现帐户控制。
经典案例是:新浪微博被XSS攻击,大量用户自动转发微博、私信。自动关注用户,大量用户被莫名其妙地控制。
那么黑客是如何植入这些JavaScript代码的呢?
主要方式有两类:反射型XSS和存储型XSS。
所谓的反射型XSS就是攻击者通过特定手法诱导用户去访问一个包含恶意代码的URL,比如标题很有吸引力或邮件形式,当受害者点击这些专门设计的链接的时候恶意代码会直接在受害者主机上的浏览器执行。此类 XSS 通常出现在网站的搜索栏、用户登录口等地方,也就是我们常说的钓鱼链接。
第二类是存储型XSS。攻击者事先将恶意代码通过服务器的漏洞上传到服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码。这就意味着只要访问了这个页面的访客,都有可能会执行这段恶意脚本,因此储存型XSS的危害会更大。存储型 XSS 一般出现在网站留言、评论、博客日志等交互处,恶意脚本存储到客户端或者服务端的数据库中。比如用户撰写一段包含js代码的内容,当内容在html网页展示时,js代码也会被拼接到网页中,用户就可能会执行到这段js代码,从而获取当前用户的Cookie信息,窃取到用户的账户信息。
如何防范XSS攻击呢?
1、入参字符过滤 在源头控制,把输入的一些不合法的东西都过滤掉,从而保证安全性。移除用户上传的Style节点,<iframe>, <script>,<a>, <script>节点等
2、出参进行编码 一些常见的符号,如<>在输出的时候要对其进行转换编码,这样做浏览器是不会对该标签进行解释执行的,同时也不影响显示效果。例如:对<>做编码如:"<"用:"<",">"用:">"来代替
3、设置cookie httponly为true 确保就算有js木马被执行,用户的cookie核心信息也不会被获取到