它的作用:将PHP输出到页面的字符串按不同种类进行编码输出,包括:html编码、html属性编码、JS编码、CSS编码。
我试用了了下JS编码,它的严格程度是除了数字字母等字符外,其他字符一律编码成16进制符。比如:
页面JS脚本中:
var x={$str};
在后台PHP中要输出$str值,而这个值有可能被当作xss攻击:$str = '1;alert(2);'
输到JS脚本中就是:var x=1;alert(2);
上面脚本执行了xss攻击代码。要在输出端做xss防御,必须做相应编码。针对上面的脚本有两方案:
(1)变量值两端加引号,且该值做ja
var x=escape( "{$str}" );
这种方案需要有良好的编程习惯才能做到。(2)使用专门的编码功能函数,像zend/escaper类库中的escapeJs方法。这个功能仿照了OWASP ESAPI的ja
//我将escaper改写成适合tp使用
$str = 'l;alert(2)';
$output = new \Org\Util\Escaper();
$this->assign('var', $output->escapeJs($str));
$this->display();
JS端输出为:var y = l\x3Balert\x282\x29;
我把原来zend/Escaper改写成符合TP 3.2风格的类库,将它存放在ThinkPHP/Common/Library/Org/Util/下就可以使用了。使用示例在上面有写了。
类库中主要的几个方法:
escapeHtml($string) //html编码
escapeHtmlAttr($string) //html属性编码
escapeJs($string) //JS编码
escapeUrl($string) //url编码
escapeCss($string) //css编码