【无标题】

XSS全称是Cross Site Scripting即跨站脚本,当目标网站目标用户浏览器渲染HTML文档的过程中,出现了不被预期的脚本指令并执行时,XSS就发生了。

作为一种HTML注入攻击,XSS攻击的核心思想就是在HTML页面中注入恶意代码,而XSS采用的注入方式是非常巧妙的。在XSS攻击中,一般有三个角色参与:攻击者、目标服务器、被攻击者的浏览器。

(一)攻击类型

1.反射型XSS(非持久型XSS)

攻击方式:注入代码是从目标服务器通过错误信息、搜索结果等等方式“反射”回来的:发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。

2.存储型XSS

攻击方式:将内容经正常功能提交进入数据库持久保存,当前端页面获得后端从数据库中读出的注入代码时,恰好将其渲染执行。

3.DOM-based 型XSS攻击

攻击方式:纯粹发生在客户端的攻击。DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞。

复现XSS漏洞

步骤1:设置漏洞环境

示例页面

const data = decodeURIComponent(location.hash.substr(1));
const root = document.createElement('div');
root.innerHTML = data; 
 
for (let el of root.querySelectorAll('*'))//找出所有标签
 {
    let attrs = [];
    for (let attr of el.attributes) {
        attrs.push(attr.name);
    }
    for (let name of attrs) {
        el.removeAttribute(name);
    }
}
 
document.body.appendChild(root); 

步骤2:复现XSS漏洞

常见XSS攻击方式
一些常用的标签与属性

1.scirpt 标签



2.img 标签

 标签定义 HTML 页面中的图像。


3.input 标签

 标签规定了用户可以在其中输入数据的输入字段。
onfocus 事件在对象获得焦点时发生:


4.details 标签

标签通过提供用户开启关闭的交互式控件,规定了用户可见的或者隐藏的需求的补充细节。ontoggle 事件规定了在用户打开或关闭
元素时触发:


 

使用一个简单的反射型XSS漏洞。

步骤3:分析漏洞

在这个示例中,漏洞的原因在于未对用户输入进行适当的过滤和转义。恶意脚本被嵌入到页面中,并在用户浏览器中执行。攻击者可以利用这个漏洞进行各种恶意活动,如盗取用户的Cookie、劫持会话等。

步骤4:修复漏洞




    XSS漏洞示例 - 修复版


    

欢迎来到我们的网站!

如何防止XSS攻击

1. 输入合法性验证:在服务端对用户输入的数据进行合法性验证,如检查输入是否符合指定格式,排除恶意字符等。

2. 转义特殊字符:在网页中用户输入的内容需要使用转义字符,例如将 < 转义成 <,将 > 转义成 >,避免浏览器将这些字符误解为标签等。

3. 设置HTTP头部:设置HTTP头部,包括Content-Security-Policy、X-Content-Type-Options、X-XSS-Protection等,来使浏览器拦截来自第三方资源的恶意脚本。

4. 使用脚本过滤器:使用脚本过滤器,如Google的Closure Library和jQuery库等,能够对来自用户的数据进行过滤和检查。

5. 限制cookie:限制cookie只能在HTTPS连接下使用,并使用HttpOnly标识确保cookie不能通过JavaScript代码访问。

总的来说,防止XSS攻击需要综合应用多种方法,建立完整的安全防护机制,保护系统的安全性。

你可能感兴趣的:(安全,web安全)