跨站脚本攻击与SQL注入攻击区别在于XSS主要影响的是客户端安全,SQL注入主要影响Web服务器安全。前端
1、反射式XSSweb
非持久型、参数型跨站脚本,主要用于将恶意脚本附加到URL地址的参数中。正则表达式
low:安全
服务器端核心代码:服务器
观察到并无对name进行任何的过滤操做,xss
那么输入<script>alert(123456)</script>观察到弹窗。函数
Medium:3d
看到有一个 $name = str_replace( '<script>', '', $_GET[ 'name' ] );blog
这个函数将字符“<script>”换为NULL,那么因为函数只执行一次,有多种方法能够绕过。事件
好比将这个标签双写绕过,可是只能过滤一次,就达成了咱们的目的。
好比:<sc<script>ript>alert(123456)</script>
或者使用大小写混淆的方法。
<Script>alert(123456)</script>
High:
观察到使用了正则表达式来过滤:
preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i'
那么咱们就不能使用大小写绕过和重写的方法来绕过了。
虽然没法使用<script>标签注入XSS代码,可是能够经过img、body等标签的事件或者iframe等标签的src注入恶意的js代码。这样就会避免出现<script>标签被正则表达式匹配到。
咱们可使用如下:
<img src=" " onerror=alert('xss')>
(由于src无咱们就能够将其路径设置为null)
Impossible:
2、存储式XSS
持久型跨站脚本,更具威胁性,而且可能影响到web服务器自身的安全。XSS一般用于发动Cookie窃取、恶意软件传播(蠕虫攻击)、会话劫持、恶意重定向等。存储式XSS会保存在服务器上,有可能会跨页面存在,它不改变页面URL的原有结构,因此有时候还能逃过一些IDS检测。
从攻击过程来讲,反射式XSS通常要求攻击者诱使用户单击一个包含XSS代码的URL连接;而存储式XSS则只需让用户查看一个URL连接,这个连接中存储了一个脚本。
low
输入有限制,修改前端最大长度后插入<script>alert(123456)</script> 语句xss
Medium
仍是加一个<script>标签过滤,可使用上述方法进行绕过(重写或者大小写绕过)
使用<Script>alert(/xss/)</Script>绕过:
High
一样正则过滤,使用
<img src=1 οnerrοr=alert(/XSS/)>
Impossible