手把手教你xss攻击
一句话解释 xss 就是通过提供恶意的用户输入让浏览器执行恶意的 JavaScript 代码。
最简单的例子
<div>
<h1> Welcome {your input} </h1>
</div>
这里页面希望你通过文本框输入自己名字,然后把你输入的名字展示出来。假如你输入的名字是:<script>alert('XSS')</script>
这时候浏览器将解析下面的 html 代码
<div>
<h1>
{" "}
Welcome <script>alert('XSS')</script>
</h1>
</div>
script 标签里的 js 代码就被执行了,这就是一个最简单的 xss。
复杂一点点的例子
<div>
<h1> Welcome <input value="{your input}"</h1>
</div>
这时候如果你输入<script>alert('XSS')</script> 那么将得到类似下面的结果
<div>
<h1> Welcome <input "<script>alert('XSS')</script>"</h1>
</div>
因为 script 标签被包含在双引号里,浏览器会认为这是一个普通的字符串,所以不会执行 js 代码。不过如果你输入“"><script>alert('XSS');</script>” 那么你将会打开一个新的局面
<div>
<h1> Welcome <input ""><script>alert('XSS')</script></h1>
</div>
input 标签被强行闭合,script 标签成功上位。这时候 js 代码又可以执行了。
再来个例子
<script>document.getElementsByClassName('name')[0].innerHTML='{input}';</script>
这个例子里我们要想办法在现有的代码中插入恶意的 js 代码,这里需要用到 2 点小知识
- js 代码中
;号可以结束一行语句 - js 代码中
//表示后面的所有内容都是注释,可以被忽略掉
因此如果我们输入的是';alert('XSS');// 那么中间的 alert 语句是可以执行的
<script>
document.getElementsByClassName('name')[0].innerHTML='';alert('XSS');//'
</script>
前面的单引号被第 1 个单引号匹配并终结,后面的分号直接结束了这一句,而后面的那个单引号则被// 注释掉了,所以中间的 alert 代码是可以顺利执行的。


