Yii 上的 XSS 保护

XSS Protection on Yii

我需要通过 URL 保护我的 Web 应用程序免受 xss 攻击。 做这个的最好方式是什么? 应用程序很大,所以我无法编辑每个动作,需要一些通用的东西。

示例:

如果你的目标是在处理它们之前操纵你的动作,你可以在你的 controller/component 中使用 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);
}

articles 展示了如何使用 SQL 注入、XSS 攻击和 CSRF 确保您的应用程序安全。

希望对你有帮助。

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

$num = $_GET["index"];

if (preg_match("^\d{2}$", $num)) {
   //allowed
} else {
   //not allowed
}

您还可以创建白名单或黑名单,如果您的输入可以分组到应用程序允许的范围内,则使用白名单,否则使用黑名单。此列表可以存储在您的数据库或文件中,您可以轻松升级而不会影响您的应用程序。在处理您的输入之前,您只需将您的输入与该列表进行比较。

我最后的建议是编码,你应该对你的输入和输出进行编码,因为你来自数据库的数据可能包含恶意代码,也许有人错误或恶作剧,总是考虑所有可能性。对于这种情况,我记得函数 htmlspecialcharsutf8_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);
    }
}