网站建设方案书 百度文库,打开百度搜索网站,素材库网站,网站运营的提成方案怎么做解码规则
html解析器对html文档进行解析#xff0c;完成解析并创建DOM树JavaScript或者CSS解析器对内联脚本进行解析#xff0c;完成js、css解码url解码会根据url所在的顺序不同而在JS解码或者解码后
解码顺序
html解析第一步执行#xff0c;而JS解析和URL解析则要根据情…解码规则
html解析器对html文档进行解析完成解析并创建DOM树JavaScript或者CSS解析器对内联脚本进行解析完成js、css解码url解码会根据url所在的顺序不同而在JS解码或者解码后
解码顺序
html解析第一步执行而JS解析和URL解析则要根据情况而定
HTML解析器
1、html解析器以状态机的方式运行
状态流程图为 即Data—》Tag open----》Tag name —》Data
注意如果我们的标签是在Data状态下被解析出来的那么标签将作为一种文本输出来 举例pHellop 初始状态为Data state 当遇到时状态转为 Tag open读取a-z某个字符创建开始标签然后状态变为Tag name 知道读取到,状态变为Data接着读取到H会识别并生成一个字符相应得会为Hello中的每个字符生成一个字符符号之后遇到又变为Tag open读取到/则会创建一个闭合标签并将状态改为Tag name直到遇到后回到Data state。
注意HTML解析器处于Data State、RCDATA State 、Attribute Value State属性值字符实体会被解码为对应的字符
2、原始文本元素
特性该元素标签中的实体不会被HTML解码 标签scriptstyle 举例标签中的实体字符不会被html解码因此不会执行js
scriptalert#40;#49;#41;/script3、RCDATA 元素
特性html解析器遇到该元素标签时会进入RCDATA状态实体字符会被解析器解码 标签textarea、title 举例字符实体会被解码但是不会执行JS因为没有进入Tag open状态其中script不会被解释为HTML标签
textarealt;scriptgt;alert#40;#49;#41;lt;/script/textarea
解码得到textareascriptalert(1)/script/textareaJavaScript解析器
JavaScript中有三个地方可以出现JS编码 1、字符串
scriptalert(“\u0031”);/script
被编码的为1且是字符串可以正常解码并触发执行2、标识符
script\u0061\u006c\u0065\u0072\u0074(1);/script
被编码的部分为alert字符是函数名属于在标识符中的情况因此会被正常解码并执行JS
3、控制符 包含单引号、双引号、括号等 特性能被解码但不会解释为控制字符即失去特殊意义只会被当做标识符或字符串的一部分
scriptalert\u0028″xss”);/script
\u0028会被解码为( 但是不会触发JS因为是控制符
URL解析器
1、URL的协议部分必须为ASCII字符、否则URL解析器的状态机将进入No Scheme状态
a href%6a%61%76%61%73%63%72%69%70%74:alert(1)/a
url编码部分为javascript因为作为协议部分的javascript被编码故不会触发JS
2、url中的符号不能被以任何形式编码
a hrefjavascript%3aalert(1)/a
:被url编码为%3a导致url状态机进入No Scheme状态故不会触发JS
3、当javascript没有被编码时
a href javascript:alert(3)hhhhhaJS编码
a hrefjavascript:\u0061\u006c\u0065\u0072\u0074(3)hhhhhh/a再对JS编码来一个URL编码
a hrefjavascript:%5c%75%30%30%36%31%5c%75%30%30%36%63%5c%75%30%30%36%35%5c%75%30%30%37%32%5c%75%30%30%37%34(3)hhhhhh/a这个是可以成功执行的当HTML解析到href时交给URL处理URL发现了javascript:把后面的数字解码后交由JavaScript处理所以会弹出
例子
a href%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29hhhh/a
URL encoded javascript:alert(1) //冒号()没有被编码
Answer: The javascript will NOT execute.HTML没有编码不用考虑根据hrefURL模块处理但是协议没办法识别即编码的JavaScriptURL会解码出来但JS不会被执行所以url编码的XSSjavascript一定不能被url编码编码后无法识别js还是不能执行 a href#x6a;#x61;#x76;#x61;#x73;#x63;#x72;#x69;#x70;#x74;:%61%6c%65%72%74%28%32%29
Character entity encoded javascript and URL encoded alert(2)
Answer: The javascript will executeHTML先解码得到
a hrefjavascript:%61%6c%65%72%74%28%32%29href中为URLURL模块可识别为javascript协议进行URL解码得到
a hrefjavascript:alert(2)由于是javascript协议解码完给JS模块处理于是被执行
div#60;img srcx οnerrοralert(4)#62;/div
Character entity encoded and
Answer: The javascript will NOT execute.当HTML解析到#60时此时的状态为Data会被解码但是不能创建img标签因为不是Tag open状态所以解码后被当做文本不会执行
button onclickconfirm(7#39;);Button/button
Character entity encoded
Answer: The javascript will execute.这里onclick中为标签的属性值会被HTML解码得到
button onclickconfirm(7);Button/button然后被执行
button onclickconfirm(8\u0027);Button/button
Unicode escape sequence encoded
Answer: The javascript will NOT execute.不需要HTML解码onclick中的值会交给JS处理在JS中只有字符串和标识符能用Unicode表示显然不行JS执行失败。
script#97;#108;#101;#114;#116#40;#57;#41;#59/script
Character entity encoded alert(9);
Answer: The javascript will NOT execute.不会被执行script属于原始文本元素(Raw text elements)只可以容纳文本注意没有字符引用于是直接由JS处理JS也认不出来执行失败
参考链接
https://blog.csdn.net/baidu_38844729/article/details/109328472 https://xz.aliyun.com/t/5863