当前位置: 首页 > 后端技术 > Node.js

Web安全漏洞的XSS攻击

时间:2023-04-03 11:19:11 Node.js

小编说:作为一个JS工程师,我觉得接触最多的漏洞就是XSS漏洞,但并不是所有的同学都对它有清晰的认识。今天我们请到了@卢士杰同学来和我们分享他眼中的XSS漏洞攻击,希望对大家有所帮助。什么是XSS攻击XSS(Cross-SiteScripting)又称为跨站脚本攻击。XSS的重点不是跨站,而是脚本执行。XSS是一种经常出现在Web应用程序中的计算机安全漏洞,是由于Web应用程序对用户输入的过滤不充分造成的。常见的XSS攻击分为三种类型:反射型、基于DOM型和存储型。其中反射型和DOM-based型可归为非持久性XSS攻击,存储型可归为持久性XSS攻击。1、反射型反射型XSS一般被攻击者利用,通过特定的方式(如邮件)引诱用户访问包含恶意代码的URL。或由主机上的浏览器执行。对访问者来说是一次性的,具体来说就是我们把我们的恶意脚本通过URL传递给服务器,服务器只是把脚本“反射”回访问者的浏览器,不做任何处理,让访问者的浏览器执行相应的脚本。反射型XSS的触发需要后端的参与。为了避免反射型XSS,后端的协调是必要的。后端在解析前端的数据时,首先进行相关的字符串检测和转义处理。此类XSS通常出现在网站的搜索栏、用户登录端口等处,常用于窃取客户端cookie或进行钓鱼。整个攻击过程大致如下:2.基于DOM的客户端脚本可以在不依赖服务器端数据的情况下动态检查和修改页面内容。例如,如果客户端从URL中提取数据并在本地执行,如果用户在客户端输入的数据包含恶意JavaScript脚本,并且这些脚本没有得到适当的过滤和消毒,应用程序可能会受到基于DOM的攻击。跨站脚本攻击。需要特别注意以下用户输入源document.URL、location.hash、location.search、document.referrer等。整个攻击过程大致如下:3.存储攻击者将恶意代码上传或存储在有漏洞的服务器,只要受害者浏览包含恶意代码的页面,恶意代码就会被执行。这意味着任何访问此页面的访问者都可能执行此恶意脚本,因此存储型XSS的危害会更大。存储型XSS一般发生在网站消息、评论、博客日志等交互场所,恶意脚本存储在客户端或服务器的数据库中。整个攻击过程大致如下:XSS攻击的危害XSS可以导致:攻击劫持访问;窃取cookies实现无密码登录;配合csrf攻击完成恶意请求;使用js或css破坏页面正常结构和样式等;防御方法1.XSSHTML编码防御应用范围:HTML编码是在将不可信的数据放入HTML标签(如div、span等)时进行的。编码规则:转义&<>"'/转义为实体字符(或十进制、十六进制)。示例代码:functionencodeForHTML(str,kwargs){return(''+str).replace(/&/g,'&').replace(/<.replace(/>/g,'>').replace(/"/g,'"').replace(/'/g,''')//'不推荐,因为它不在HTML规范中.replace(/\//g,'/');};HTML有三种编码表示:十进制、十六进制和命名实体。例如小于号(<)可以用三种方式编码:"十进制><"、"十六进制=><"、"命名实体=><"。对于单引号('),由于HTML规范中没有实体字符编码方式,所以这里使用16进制编码。2、XSS防御HTML属性编码的应用范围:当将不可信数据放入HTML属性(不包括src、href、style和事件处理属性)时,进行HTML属性编码编码规则:除字母数字字符外,使用HH;(或可用??命名实体)格式转义所有ASCII值小于256的字符示例代码:functionencodeForHTMLAttibute(str,kwargs){letencoded='';for(leti=0;i