我一遍又一遍地看着我似乎找不到我想要的答案,但是这里有:
我有一个真正计算机文盲的客户端,我想确保在没有干预的情况下处理出现的任何错误。我现在坚持的一件事是“您提交的URI已禁止使用字符”。错误。
我不想简单地允许所有角色绕过错误。相反,我想做的只是在发生此错误时重定向到特定的URI。例如:
www.local.com/project/login/''''---> www.local.com/project/login
我看着用钩子做这件事,但我希望能够在我想执行检查时指定自定义URL。
我正在考虑使用对库方法的调用,该方法将从配置中提取字符,然后根据是否通过检查重定向,并将当前URL和URI重定向作为参数。这是实现它的方法,还是有更简单的方法来管理它?
答案 0 :(得分:1)
我已经阅读了上面的所有评论 - 但我认为你错过了这样做的简单方法。
只需重载_filter_uri()
函数,并执行任何操作:
(将此文件放在application / core / MY_URI.php中)
// Normally this is not fully uppercase - but for some reason the URI filename is
Class MY_URI extends CI_URI
{
/**
* Filter segments for malicious characters
*
* @access private
* @param string
* @return string
*/
function _filter_uri($str)
{
if ($str != '' && $this->config->item('permitted_uri_chars') != '' && $this->config->item('enable_query_strings') == FALSE)
{
if ( ! preg_match("|^[".str_replace(array('\\-', '\-'), '-', preg_quote($this->config->item('permitted_uri_chars'), '-'))."]+$|i", $str))
{
// DO SOMETHING HERE LIKE REDIRECT OR CHANGE THE URL
}
}
// Convert programatic characters to entities
$bad = array('$', '(', ')', '%28', '%29');
$good = array('$', '(', ')', '(', ')');
return str_replace($bad, $good, $str);
}
答案 1 :(得分:0)
这是我在项目中使用的解决方案:
文件: application / core / MY_URI.php
class MY_URI extends CI_URI {
/**
* Filter URI
*
* Filters segments for malicious characters.
*
* @param string $str
* @return void
*/
public function filter_uri(&$str)
{
if ( ! empty($str) && ! empty($this->_permitted_uri_chars) && ! preg_match('/^['.$this->_permitted_uri_chars.']+$/i'.(UTF8_ENABLED ? 'u' : ''), $str))
{
return preg_replace('~[^a-zA-Z 0-9%.:_\-,()]+~', '', $str);
}
}
}