Php 基于Yii的XSS保护
我需要通过URL保护我的web应用程序免受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
- 警报('Xss')
- 警报('Xss')&q=1
- 警报('Xss')
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行动的方案。