what xss
跨站脚本攻击–xss,是指攻击者通过在web页面中写入恶意脚本,造成用户在浏览页面的时候,控制用户浏览器进行操作的攻击方式。
xss 的本质上攻击的是浏览器的解析引擎,通过控制浏览器解析前端代码的输入输出达到攻击的目的。
HTML
HTML 5 大元素
空元素 没有闭合标签,代表有< input>,< area>,< img>,
,< link>…
空元素不能容纳任何元素内容,因为没有闭合标签。
原始文本元素 < script>< /script>,< style>< /style>…
原始文本元素只能容纳原始文本内容。
rcdata元素 < textarea>< /textarea>,< title>< /title>…
rcdata 可以容纳文本内容和字符引用。
外部元素 代表有< svg> 命名空间或者mathml 命名空间元素
可以容纳文本,cdata段,字符引用(<,<),其他元素和注释。
基本元素 可以容纳文本内容,字符引用,其他元素和注释。
JavaScript 运行的三个地方
1,HTML的< script>< /script> 标签之中。
2,HTML标签的事件属性之中,onclick、onerror
3,浏览器的console开发控制器中。
xss 测试
xss 漏洞原理
核心 输入输出
输入指的是攻击者对服务器网页输入恶意代码,输出指的是浏览器接收到恶意代码后能解析并输出到前端。
xss的原理就是开发者没有对输入的内容进行过滤,导致攻击者输入的代码与前端原有代码发生混淆,形成新的页面语句,并且新的页面语句能被浏览器解析并输出。
xss 测试步骤
1,找到输入点,输入包含特殊字符的内容,单引号,尖括号。。。
2,打开网页源代码或查看页面元素,在源码中查看输出的位置。
3,根据浏览器解析输出的位置,来构造正确的攻击语句。
xss 的三大类型
反射型XSS:
只是简单地把用户输入的数据反射给浏览器,黑客需要诱使用户点击链接。当目标用户访问该链接时,服务器接收该用户目标的请求并进行处理,然后服务器把带有XSS代码的数据发送给目标用户的浏览器,浏览器解析这段带有XSS代码的恶意脚本后,就会触发XSS漏洞。反射型XSS又称为非持久性XSS,这种攻击方式具有一次性。
要经过浏览器和服务器处理。
存储型XSS:
把用户输入的数据”存储“在服务器端。这种XSS具有很强的稳定性。比较常见的一个场景是,攻击者写下一篇包含恶意Javascript代码的博客文章,文章发表后,所有访问该博客文章的用户,都会在他们的浏览器中执行这段恶意的Javascript代码。黑客把恶意的脚本保存在服务器端。存储型XSS也叫持久性XSS。
也要经过浏览器和服务器。
DOM XSS:
不与后台服务器进行交互,是一种通过 dom 操作前端代码输出的时候产生的问题,实际上也是一种放射性xss。
xss 的防御
只要进行实体字符转义就能防止xss吗?
不能。一般的话,实体字符转义只能防范输出在元素内容里面的特殊符号。也有< svg>的黑魔法可以绕过< script>元素内容中的字符实体转义。
还有字符实体转义不能防御输出在属性内的特殊符号,比如通过href="javascript:alert(1)"这种就无法防御。
xsS的防御主要以下3点:
1、使用htmlspecialchars()函数做实体字符转义;
2、对一些链接输出点做校验,必须规定开头是http://或https://的字符串;
3、过滤类似< svg>的特殊标签。
对输入进行过滤,对输出进行转译。