Yii2中的XSS防范策略CHtml::encode()
- 8206
- PHP
- 5
- super_dodo
- 2015/11/06
什么是XSS?推荐一篇好文章:http://www.dodobook.net/linux/2451
XSS 漏洞修复
原则:不相信客户输入的数据
注意: 攻击代码不一定在《script》《/script》中 将重要的cookie标记为http only, 这样的话Javascript 中的document.cookie语句就不能获取到cookie了. 只允许用户输入我们期望的数据。 例如: 年龄的textbox中,只允许用户输入数字。 而数字之外的字符都过滤掉。 对数据进行Html Encode 处理 过滤或移除特殊的Html标签, 例如: script, iframe , < for <, > for >, " for 过滤JavaScript 事件的标签。例如 "onclick=", "onfocus" 等等。
Yii中的XSS防范
<h2>Profile of <?php echo CHtml::encode($user->name) ?></h2> # 此方法的源码: /** * Encodes special characters into HTML entities. * The [[\yii\base\Application::charset|application charset]] will be used for encoding. * @see decode() * @see http://www.php.net/manual/en/function.htmlspecialchars.php */ public static function encode($content, $doubleEncode = true) { return htmlspecialchars($content, ENT_QUOTES | ENT_SUBSTITUTE, Yii::$app->charset, $doubleEncode); }
htmlspecialchars & htmlentities & urlencode 三者的区别
http://php.net/manual/zh/function.htmlspecialchars.php
http://php.net/manual/zh/function.htmlentities.php
http://cn2.php.net/manual/zh/function.urlencode.php
htmlspecialchars
#Convert special characters to HTML entities string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ] ] ] ) #The translations performed are: & (ampersand) becomes & " (double quote) becomes " when ENT_NOQUOTES is not set. ' (single quote) becomes ' (or ') only when ENT_QUOTES is set. < (less than) becomes < > (greater than) becomes > $new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES); echo $new; // <a href='test'>Test</a>
htmlentities
Convert all applicable characters to HTML entities string htmlentities ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ] ] ] ) $str = "A 'quote' is <b>bold</b>"; // Outputs: A 'quote' is <b>bold</b> echo htmlentities($str); // Outputs: A 'quote' is <b>bold</b> echo htmlentities($str, ENT_QUOTES);
urlencode
URL 编码是为了符合url的规范。因为在标准的url规范中中文和很多的字符是不允许出现在url中的。
例如在baidu中搜索"测试汉字"。 URL会变成
http://www.baidu.com/s?wd=%B2%E2%CA%D4%BA%BA%D7%D6&rsv_bp=0&rsv_spt=3&inputT=7477
所谓URL编码就是: 把所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)
此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与 RFC1738 编码(参见 rawurlencode())不同。
echo '<a href="mycgi?foo=', urlencode($userinput), '">'; $query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar); echo '<a href="mycgi?' . htmlentities($query_string) . '">';
优势而无准备,不是真正的优势,也没有主动。懂得这一点,劣势而有准备之军,常可对敌举行不意的攻势,把优势者打败。
- MySQL入门很简单—MySQL函数-系统函数/加密函数等
- 今日资本徐新:“90后”快让夜总会小姐失业了!
- [转]每天一个linux命令(40):ifconfig命令
- Yii2中Model的一些常用rules验证规则
- SVN服务端客户端在Windows下的安装配置和使用(详细图文)
- 马云买下肯德基中国业务,面试25人只有其一人失败
- Yii2使用$this->context获取当前的Module、Controller(控制器)、Action等
- 【专访 PHP 之父】PHP7 性能翻倍关键大揭露
- JavaScript获取当前页面的URL地址document.URL
- WordPress在Apache和Nginx下的Rewrite规则
相关阅读
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
热门文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
最新文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例