最近做了一套关于XSS跨站脚本攻击的题目,有些收获。
有句话说得好:最好的防守就是进攻。
这句话用在网络安全上十分恰当 —— 只有我们熟悉怎样攻击别人,才能更好更清晰的知道怎样防御攻击。
那么,让我们来看一下怎么攻击别人吧[/坏笑]
目录:
什么是XSS
XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页面中去。使别的用户访问都会执行相应的嵌入代码。从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
XSS英文名是Cross Site Script(跨站脚本),为了与样式CSS区分,因此简称XSS。
XSS简单入门
那么知道原理了,到底怎样操作才能实现XSS跨站攻击呢。
其实没想象中的那么难上手,根据 <script>
标签可以放在页面任意位置的特点。
假如有这样一个情况:
//服务端代码
function render($input) {
return '<div>' + $input + '</div>';
}
前端输入内容会被 <div>
包裹后,返回给前端。那么我们输入什么才可以进行一次XSS攻击呢。
很简单,我们可以直接输入
<script>alert(1);</script>
那么页面就会直接弹出‘1’,alert会中断用户进程,用户体验极差。就顺利达到通过input框提交一段脚本代码,有用户访问页面就会自动弹出‘1’。
整个流程大致是这样:
有个表单域:
<input type="text" name="content" value="$input">
。$input
是用户输入的数据;用户输入
<script>alert(1);</script>
,提交后将会弹出一个‘1’警告窗口,接着将数据存入数据库;等到别的客户端请求这个留言的时候,将数据取出显示留言时将执行攻击代码,就会显示一个‘1’警告窗口。
深入XSS跨站攻击
经过刚才的例子,可以看出我们所要做的很简单,就是想方设法执行 <script>
脚本内容就行了。但实际情况往往不向上述例子那么理想,因为前段表单输入通常是有验证的。那么我们怎样才能跳过各种各样的验证呢?
(本文不涉及用户资料窃取等内容,仅通过实现 alert(1)
来讲解XSS跨站攻击)