XSS攻击

之前一直没有注意过这种安全性问题,但是昨天实验室一个娃面试的时候被问到了这个问题,突然觉得挺感兴趣的,所以就了解了一下。

什么是XSS攻击

XSS全称(Cross Site Scripting) 跨站脚本攻击, 是Web程序中最常见的漏洞。指攻击者在网页中嵌入客户端脚本(例如JavaScript), 当用户浏览此网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的. 比如获取用户的Cookie,导航到恶意网站,携带木马等。

XSS攻击的原理

XSS主要就是通过一些正常的站内交互途径,例如发表评论,提交含有JavaScript的内容文本,这时服务器端如果没有过滤或转义掉这些脚本,作为内容发布到了页面上,其他用户访问这个页面的时候就会运行这些脚本,从而被攻击。
那么先举个栗子吧:

 
 

JavaScript代码:

 function submit() {
        var input = document.getElementById("userInput").value;
        console.log(input);
 }

当我随意输入一个值时,这个程序运行正常:

XSS攻击_第1张图片

那么如果我输入了document.cookie呢?我先给它加一个cookie

document.cookie = "name=haha";

XSS攻击_第2张图片

这只是简单的获取 cookie,如果我给里面加一些其他代码呢,后果不堪设想

XSS攻击类型

  • 反射型XSS
    主要是通过修改url的方式,因为url的参数可能在页面中用到,那我们就可以在参数中加一些恶意代码,当受害人访问这个链接的时候,这个恶意代码就执行了
  • 储蓄型XSS
    比如说有一个可以发表评论的地方,大家都可以评论,可以想到这个评论是要保存到后端的,如果这个评论有xss漏洞的话,我们发表一些恶意代码,然后恶意代码就被保存到服务器上了,当别人访问的时候,恶意代码执行,然后中招。

如何预防

1.使用XSS Filter

  • 输入过滤,对用户提交的数据进行有效性验证,仅接受指定长度范围内并符合我们期望格式的的内容提交,阻止或者忽略除此外的其他任何数据
  • 输出转义,当需要将一个字符串输出到Web网页时,同时又不确定这个字符串中是否包括XSS特殊字符,为了确保输出内容的完整性和正确性,输出HTML属性时可以使用HTML转义编码进行处理,输出到

你可能感兴趣的:(XSS攻击)