【发布时间】:2014-03-20 17:13:08
【问题描述】:
我有来自 Form 的 $returnUrl var,其中包含控制器/操作:
<?=CHtml::hiddenField('returnUrl',
Yii::app()->urlManager->parseUrl(Yii::app()->request)
);?>
在控制器中我有这样的东西:
$returnUrl = Yii::app()->request->getPost('returnUrl');
$returnUrl = array($returnUrl);
$this->redirect($returnUrl);
但它也可以工作,然后我将 $returnUrl 从 controller/action 更改为外部网站 url。例如:如果我把 http://google.com 放到 $_POST['returnUrl'] 而不是 site/index yii 将我重定向到 / http://google.com 没有任何错误。
在重定向之前检查 $returnUrl 的最佳方法是什么?如何将 $returnUrl 与我的路由或控制器/操作进行比较?
现在我做下一步:
$returnUrl = Utils::sanitizeReturnUrl($returnUrl);
...
class Utils
{
public static function sanitizeReturnUrl($returnUrl)
{
if (!preg_match('~^([-a-z0-9_]+|[-a-z0-9_]+/[-a-z0-9_]+)+$~i', $returnUrl))
{
$returnUrl = Yii::app()->homeUrl;
}
return $returnUrl;
}
}
但可能存在更合适的方式
【问题讨论】: