0

例如,我有一个工作网址:

http://localhost/article/154

其中 154 是db 中文章的$id ,控制器文章如下所示:

function index ($id = '')
{

// some code here

}

现在,当我输入如下内容时:

http://localhost/article/154dsdead34

我收到错误,因为该 ID 不在我的数据库中。但是,页面上显示了 php 错误,整个页面都搞砸了。

相反,我需要一个重定向到我的名为custom404的控制器来处理这个问题(或者如果由于某种原因不可能,至少直接重定向('/'); 到主页)

对于变体的相同修复(对于大 $id 编号或在 db 中找不到):

http://localhost/article/3004534534534234600234

或(其他参数)

http://localhost/article/154/something/derer/asdasd

如何在 CodeIgniter 中进行此类安全检查?

4

2 回答 2

3

有很多方法可以做到这一点。

在函数内部,定义($id = NULL)它跳过空错误,第一条语句可以是if ( ! is_numeric($id)) show_404();

你也可以运行$id = (int)$id;which 应该154dsdead34变成154.

路由也是一种选择。你更喜欢什么?

你可以这样做;在函数内部运行:

if ( ! preg_match("~^article/\d+$~", $this->uri->uri_string())) {
    // Redirect user
}

相应地改变。~打开和关闭正则表达式。这通常是/,但~你不必逃避/( \/)。^是字符串的开头,$也是结尾。\d+等于[0-9]+并且需要一位或更多位的大小写。我希望这是有道理的。

于 2012-11-07T09:38:26.023 回答
0

通过 config 文件夹中的 routes.php,只检查需要使用的 6 位数字

$route['article/([0-9]{1,6})'] = 'article/$1' ;

并将所有其他情况提到 404 或发送给任何其他控制器

于 2012-11-07T08:01:43.803 回答