好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

XSS漏洞的出现与防范分享 - 网站安全 - 自学php

出现情况

简单来说,在使用模板变量输出源码时,忽略了本该转义的url、html或js,若变量的值包含特殊格式或攻击者人为构造出特殊格式时出现。

若这些模板变量:

1.未进行url转义①

示例:

常见模板变量出现场景

源码

a标签的hred属性内

<a href=]http:/mysite.com/{{$vars}}]></a>

iframe、img、script、link等标签的src属性中

< img src=] http:// mysite.com/{{$vars}}]/>

js代码的被当做url使用的变量中

var url = ‘http:// mysite.com/{{$vars}}’

 

2.未进行html转义:②

示例:

常见模板变量出现场景

源码

title标签内

<title>{{$user}}的个人中心</title>

Input的value值

< input value=] {{$user}}]/>

 

3.未转义的js变量:③

示例:

常见模板变量出现场景

源码

页面内联script标签内的js 变量

var a = ‘{{$a}}’

页面内dom元素0级事件内

<div onclick=]someFunction({{$param}})]>

在异步所使用的模板中

{{$callback}}{    {{$obj}}   }

 

4.需要先进性html转义,后进行js转义:④

示例:

常见模板变量出现场景

源码

页面内联script标签内的js 语句内,后续将插入页面

dom.innerHTML = [{{$vars}}];或

document.write([{{$vars}}])

 

5.需要先进性js转义,后进行html转义:⑤

示例:

常见模板变量出现场景

源码

页面内dom元素0级事件内方法的参数

<div onclick=]someFunction({{$param}})]>

 

防治办法

根据上面的红色标记,主要采取下表的防治办法:

类型

smarty转义

其他

①   进行url转义

{{$var|escape:]url]}}

类似于js内的encodeURIComponent,整体转义

转义字符:转义了除 ! ‘ ( ) * – . _ ~ 0-9 a-z A-Z 之外的所有字符,它们被转换成了各自对应的16进制的转义序列,中文字符在不同charset下得到的结果不一样

②   进行html转义

{{$var|escape:]html]}}

Tangarm提供了一个利用js转义的方法baidu.string.encodeHTML,在利用js生成html模板时内部的变量可用

转义字符:smarty提供的方法转义了< > ‘ [4个字符,一般转义这4个即可,tangram提供的方法还多转义了 & 字符,一共转义了5个字符

③   进行js转义

{{$var|escape:]javascript]}}

转义字符:’ ] / n r

④   先进行html后进行js转义

{{$var|escape:]html]|escape:]javascript]}}

实际上最终转义了字符:

[<] 转成 [&lt;]

[>] 转成 [&gt;]

[’] 转成 [’]

[]] 转成 []]

[] 转成 [\]

[/] 转成 [/]

[n] 转成 [n]

[r ]转成 [r]

⑤   先进行js后进行html转义

{{$var|escape:] javascript [|escape:]html]}}

实际上最终转义了字符:

[<] 转成 [&lt;]

[>] 转成 [&gt;]

[&] 转成 [&amp;]

[’] 转成 [&#39;]

[]] 转成 [&quot;]

[] 转成 [\]

[/] 转成 [/]

[n] 转成 [n]

[r] 转成 [r]

 

高级

1使smarty默认转义:在显示页面前先执行$smarty->default_modifiers = array(‘$’ => ‘escape:]html]‘);则所有的$开头的smarty变量都默认转义了,若需要取消转义,则对无需转义的变量使用{{$var|smarty:nodefaults}}

2同域下的异步操作:尽量采用ajax的方式,少使用插入script标签的方式,可以减少因为callback函数名未转义而出现的xss 漏洞

3请服务器端将json类型的数据Response的hearer 的contentType设置为[application/javascript]

查看更多关于XSS漏洞的出现与防范分享 - 网站安全 - 自学php的详细内容...

  阅读:48次