Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 基于Yii的XSS保护_Php_Yii_Xss - Fatal编程技术网

Php 基于Yii的XSS保护

Php 基于Yii的XSS保护,php,yii,xss,Php,Yii,Xss,我需要通过URL保护我的web应用程序免受xss攻击。 最好的方法是什么? 该应用程序是巨大的,所以我不能编辑每个动作,需要一些一般性的东西 示例: 警报('Xss') 警报('Xss')&q=1 警报('Xss') 如果您的目标是在处理操作之前操纵操作,您可以在控制器/组件中使用beforeAction,如下所示: protected function beforeAction($action) { #check a preg_match on a url sa

我需要通过URL保护我的web应用程序免受xss攻击。 最好的方法是什么? 该应用程序是巨大的,所以我不能编辑每个动作,需要一些一般性的东西

示例:

  • 警报('Xss')
  • 警报('Xss')&q=1
  • 警报('Xss')

如果您的目标是在处理操作之前操纵操作,您可以在控制器/组件中使用beforeAction,如下所示:

protected function beforeAction($action) {          

    #check a preg_match on a url sanitization pattern, like "[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]", for instance

    return parent::beforeAction($action);
}
$num = $_GET["index"];

if (preg_match("^\d{2}$", $num)) {
   //allowed
} else {
   //not allowed
}
这展示了如何通过SQL注入、XSS攻击和CSRF使应用程序安全


希望对您有所帮助。

首先,您可以使用正则表达式来验证输入,您可以在一些正则表达式中概括输入,如下所示:

protected function beforeAction($action) {          

    #check a preg_match on a url sanitization pattern, like "[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]", for instance

    return parent::beforeAction($action);
}
$num = $_GET["index"];

if (preg_match("^\d{2}$", $num)) {
   //allowed
} else {
   //not allowed
}
此外,您还可以创建白名单或黑名单,如果您的输入可以分组到应用程序中允许的内容中,请使用白名单,否则请使用黑名单。此列表可以存储在数据库或文件中,您可以轻松升级而不影响应用程序。在处理输入之前,您只需将输入与该列表进行比较

我的最后一个建议是编码,你们应该对你们的输入和输出进行编码,因为你们数据库中的数据可能包含恶意代码,可能是有人把它搞错了,或者是搞错了,你们应该考虑所有的可能性。对于这种情况,我记得函数
htmlspecialchars
utf8\u encode
,我认为您应该使用第一个函数,还可以分析输入并构建自己的编码函数

我分享以下链接:

我希望这些信息对你有帮助


祝你好运。

对于同一操作中的所有操作,只需向onBeginRequest添加一个事件句柄即可:

    $this->attachEventHandler('onBeginRequest', [$this, 'purifyParams']);



public function purifyParams($event)
{
    $userAgent = $this->getRequest()->getUserAgent();
    $isIE = preg_match('/(msie)[ \/]([\w.]+)/i', $userAgent, $version);
    if (!empty($isIE) && (int) $version[2] < 11) {
        $purifier = new CHtmlPurifier();
        $_GET = array_map(function ($param) use ($purifier) {
            return $purifier->purify($param);
        }, $_GET);
    }
}
$this->attachEventHandler('onBeginRequest',[$this,'purifyParams');
公共函数purifyParams($event)
{
$userAgent=$this->getRequest()->getUserAgent();
$isIE=preg\u match('/(msie)[\/]([\w.]+)/i',$userAgent,$version);
如果(!empty($isIE)&(int)$version[2]<11){
$purizer=新的chtmlprizer();
$\u GET=array\u map(函数($param)使用($purizer){
返回$purizer->purify($param);
},元整);
}
}

与任何其他框架/原始PHP一样。打印内容时对其进行编码<代码>echo$model->attribute错误-
echo-CHtml::encode($model->attribute)
正确
htmlentities
是通用的PHP方法
\yii\helpers\Html::encode($model->attribute)
用于Yii2。在任何操作中,hepers用于属性。同时,我需要一个解决阿尔çl行动的方案。