Yii2的XSS攻击防范策略分析_php实例

本文实例讲述了Yii2的XSS攻击防范策略。分享给大家供大家参考,具体如下:

XSS 漏洞修复

原则: 不相信客户输入的数据
注意: 攻击代码不一定在<script></script>中

① 将重要的cookie标记为http only, 这样的话Javascript 中的document.cookie语句就不能获取到cookie了.
② 只允许用户输入我们期望的数据。 例如: 年龄的textbox中,只允许用户输入数字。 而数字之外的字符都过滤掉。
③ 对数据进行Html Encode 处理
④ 过滤或移除特殊的Html标签, 例如: script, iframe , < for <, > for >, &quot for
⑤ 过滤JavaScript 事件的标签。例如 "onclick=", "onfocus" 等等。

Yii中的XSS防范

<?php echo CHtml::encode($user->name) ?>

此方法的源码:

/**
* Encodes special characters into HTML entities.
* The [[\yii\base\Application::charset|application charset]] will be used for encoding.
* @param string $content the content to be encoded
* @param boolean $doubleEncode whether to encode HTML entities in `$content`. If false,
* HTML entities in `$content` will not be further encoded.
* @return string the encoded content
* @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

Available flags constants
Constant Name Description
ENT_COMPAT Will convert double-quotes and leave single-quotes alone.
ENT_QUOTES Will convert both double and single quotes.
ENT_NOQUOTES Will leave both double and single quotes unconverted.
ENT_IGNORE Silently discard invalid code unit sequences instead of returning an empty string. Using this flag is discouraged as it » may have security implications.
ENT_SUBSTITUTE Replace invalid code unit sequences with a Unicode Replacement Character U+FFFD (UTF-8) or FFFD; (otherwise) instead of returning an empty string.
ENT_DISALLOWED Replace invalid code points for the given document type with a Unicode Replacement Character U+FFFD (UTF-8) or FFFD; (otherwise) instead of leaving them as is. This may be useful, for instance, to ensure the well-formedness of XML documents with embedded external content.
ENT_HTML401 Handle code as HTML 4.01.
ENT_XML1 Handle code as XML 1.
ENT_XHTML Handle code as XHTML.
ENT_HTML5 Handle code as HTML 5.

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 >

<?php
$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 ]
    ]
  ]
)
<?php
$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())不同。

<?php
echo '<a href="mycgi?foo=', urlencode($userinput), '">';
?>
<?php
$query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar);
echo '<a href="mycgi?' . htmlentities($query_string) . '">';
?>

更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索xss
, yii2
攻击防范
yii xss、yii2 xss、yii2 xss过滤、yii2 防止 xss 过滤器、xss防范,以便于您获取更多的相关知识。

时间: 2024-08-01 03:16:27

Yii2的XSS攻击防范策略分析_php实例的相关文章

Yii2验证器(Validator)用法分析_php实例

本文实例讲述了Yii2验证器(Validator)用法.分享给大家供大家参考,具体如下: 先看一下验证器的使用. public function rules() { return [ [['email', 'password'], 'required'], ['password', 'string', 'min'=>6], ]; } 如上所示,验证器主要使用在rules里面,对当前model里面的属性值进行验证以检查是否满足某种要求. 验证器使用格式: 书写格式为:[需要验证的属性,验证器名称,

CI框架安全类Security.php源码分析_php实例

CI安全类提供了全局防御CSRF攻击和XSS攻击策略,只需要在配置文件开启即可: 复制代码 代码如下: $config['csrf_protection'] = TRUE; $config['global_xss_filtering'] = TRUE; 并提供了实用方法: 复制代码 代码如下: $this->security->xss_clean($data);//第二个参数为TRUE,验证图片安全 $this->security->sanitize_filename()//过滤文

ThinkPHP框架安全实现分析_php实例

ThinkPHP框架是国内比较流行的PHP框架之一,虽然跟国外的那些个框架没法比,但优点在于,恩,中文手册很全面.最近研究SQL注入,之前用TP框架的时候因为底层提供了安全功能,在开发过程中没怎么考虑安全问题. 一.不得不说的I函数 TP系统提供了I函数用于输入变量的过滤.整个函数主体的意义就是获取各种格式的数据,比如I('get.').I('post.id'),然后用htmlspecialchars函数(默认情况下)进行处理. 如果需要采用其他的方法进行安全过滤,可以从/ThinkPHP/Co

ThinkPHP中数据操作案例分析_php实例

本文实例分析了ThinkPHP中数据操作方法.分享给大家供大家参考.具体如下: 模板中使用函数,相信大部分的TPer都知道也用过吧. 案例: 获取用户名的方法 function get_username($uid){ $row = M('User')->getbyUid($uid); return $row['username']; } 在模板中通过uid显示用户名 <volist name="rows" id="row"> <tr>

Yii数据模型中rules类验证器用法分析_php实例

本文实例讲述了Yii数据模型中rules类验证器用法.分享给大家供大家参考,具体如下: public function rules() { return array( array('project_id, type_id, status_id, owner_id, requester_id,', 'numerical', 'integerOnly'=>true), array('name', 'length', 'max'=>256), array('description', 'length

Yii2针对游客、用户防范规则和限制的解决方法分析_php实例

本文实例分析了Yii2针对游客.用户防范规则和限制的解决方法.分享给大家供大家参考,具体如下: 最近在用Yii2.0做项目,其中需要实现一个功能:没有登录不能访问部分页面,即游客身份访问限制.查了半天资料,终于找到答案.解决方法如下: 在access里,access即访问的意思,其中有个配置项: 'only'=>['login','about'] 这是什么意思呢,意思是仅仅在login.about两个action内起作用,即当action 是login.about时,会进入rules里做下一步验

PHP常见漏洞攻击分析_php实例

综述:PHP程序也不是固若金汤,随着PHP的广泛运用,一些黑客们也在无时不想找PHP的麻烦,通过PHP程序漏洞进行攻击就是其中一种.在节,我们将从全局变量,远程文件,文件上载,库文件,Session文件,数据类型和容易出错的函数这几个方面分析了PHP的安全性. 如何通过全局变量进行攻击? PHP中的变量不需要事先声明,它们会在第一次使用时自动创建,它们的类型根据上下文环境自动确定.从程序员的角度来看,这无疑是一种极其方便的处理方法.一旦一个变量被创建了,就可以在程序中的任何地方使用.这个特点导致

PHP与SQL注入攻击防范小技巧_php技巧

下面来谈谈SQL注入攻击是如何实现的,又如何防范. 看这个例子: 复制代码 代码如下: // supposed input $name = "ilia'; DELETE FROM users;"; mysql_query("SELECT * FROM users WHERE name='{$name}'"); 很明显最后数据库执行的命令是: SELECT * FROM users WHERE name=ilia; DELETE FROM users 这就给数据库带来

Yii2中Restful API原理实例分析_php实例

本文实例分析了Yii2中Restful API原理.分享给大家供大家参考,具体如下: Yii2 有个很重要的特性是对 Restful API的默认支持, 通过短短的几个配置就可以实现简单的对现有Model的RESTful API 这里通过分析rest部分源码,简单剖析下yii2 实现 restful 的原理,并通过一些定制实现 对 关联模型的RESTful api 操作. ~ 代表 extends from 的关系 | | rest/ | | |-Action.php ~ `\yii\base\