Xss 处理
预防xss,页面中不同区域的字串应该使用不同的手段来处理,而不是一概的htmlspecialchars,简单+实用。
<?php /** * Xss 处理 * * 作者: 刘卫锋 (kevonliu@tencent.com) * 创建时间: 2013-07-04 * * $Id: Xss.php 48518 2013-07-05 03:35:04Z kevonliu $ */ class Xss { /** * 处理链接字串 * * @param string $str * @return string */ public static function link($str) { $pairs = array( '\'' => '%27', '"' => '%22', '<' => '%3C', '>' => '%3E', ); return strtr($str, $pairs); } /** * 处理js中的字串 * * @param string $str * @return string */ public static function js($str) { // See ECMA 262 section 7.8.4 for string literal format $pairs = array( // "\\" => "\\\\", // "\"" => "\\\"", // '\'' => '\\\'', '\"' => '\\x22', '\'' => '\\x39', '\\' => '\\x92', # To avoid closing the element or CDATA section '<' => '\\x3c', '>' => '\\x3e', # To avoid any complaints about bad entity refs '&' => '\\x26', # Work around https://bugzilla.mozilla.org/show_bug.cgi?id=274152 # Encode certain Unicode formatting chars so affected # versions of Gecko don't misinterpret our strings; # this is a common problem with Farsi text. "\xe2\x80\x8c" => "\\u200c", // ZERO WIDTH NON-JOINER "\xe2\x80\x8d" => "\\u200d", // ZERO WIDTH JOINER ); return strtr($str, $pairs); } /** * 处理html中的字串 * * @param string $str * @return string */ public static function html($str) { $pairs = array( '"' => '"', '\'' => ''', '&' => '&', '>' => '>', '<' => '<', ); return strtr($str, $pairs); } } ?>
以上是php版本的代码,其他语言均类似。
欢迎指正,共同进步~~