4

我将 mode_rewrite 与 codeiniter 一起使用以获取 url,例如:

 /controller/param1/param2

大多数时候 param1 和 param2 将是数据库中的 ID(即数字),仅此而已。

问题是,我可以做什么以及我应该做什么来保护它免受潜在的黑客攻击?我应该为此使用 html 净化器,还是有更好的方法,或者甚至需要做些什么?

我在安全和保护方面真的是新手,我刚刚听说过 html 净化器,我不想像初学者可能倾向于在任何地方使用它。

我应该只 preg_match() 吗?

如果 preg_match() 是解决方案,哪个表达式只接受数值(ID 值)?

4

2 回答 2

2

在您的配置文件中,您可以找到

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-+';

您不需要使用 preg match,因为它已经在 Codeigniter 中通过这个完成了另一方面我建议进行验证,只有合适的人可以访问此链接,例如,如果项目 ID 未显示为只读用户等,您可以在控制器中进行某些检查后通过路由或重定向来处理此问题

但是我的安全性不是很好,但到目前为止我所知道的

于 2012-12-20T22:14:35.177 回答
0

如果这不是特定于 codeignitor 的问题,而是一般如何清理用户输入,那么一个简单的解决方案是在提交 SQL 之前转义并引用该值。

像这样的东西会起作用(警告:未经测试的 PHP 代码):

function escapeAndQuoteValue($value, $forceQuote = false) {
    if (is_null($value)) {
        $escapedString = 'NULL';
    } elseif (is_bool($value)) {
        $escapedString = $value ? 'TRUE' : 'FALSE';
    } elseif (isDigits($value) && $value[0] != '0') {
        $escapedString = $value; //return ints verbatim -- unless it has a leading zero
    } else {
        $escapedString = pg_escape_string($value);
    }

    $quoteString = 
        $forceQuote     ||
        is_null($value) || 
        is_bool($value) || 
         (isDigits($value) && $value[0] != '0');

    return $quoteString ? "'$escapedString'" : $escapedString; 

}

于 2012-12-21T00:59:03.163 回答