【问题标题】:Codeigniter: Url protection [closed]Codeigniter:网址保护[关闭]
【发布时间】:2012-12-08 11:45:25
【问题描述】:

我将 mode_rewrite 与 codeiniter 一起使用以获取诸如:

 /controller/param1/param2

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

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

我在安全和保护方面真的是新手,我刚刚听说过 html 净化器,我宁愿不要像初学者那样到处使用它。

我应该只是 preg_match() 吗?

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

【问题讨论】:

  • 您主要担心 XSS 或 SQL 注入吗?因为两种攻击向量的答案不同。
  • 两者...我认为。我的意思是 ID 稍后用于通过 db 查询访问数据,在此之前可能会滥用 xss 虎钳......我需要限制它,使其只接受数字内容,所以我认为 preg_match() 可能帮助。
  • 其实我认为codeigniter的活动记录类可以防止sql注入。
  • 你可以在 routes.php 中设置它。 /controller/(:num)/(:num) 之类的东西会将参数限制为仅数字输入。我认为默认情况下带有非数字字符的参数会重定向到 404。

标签: codeigniter url htmlpurifier


【解决方案1】:

在你的配置文件中你可以找到

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

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

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

【讨论】:

    【解决方案2】:

    如果这不是特定于 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; 
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-25
      • 2020-08-13
      • 2016-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-11
      相关资源
      最近更新 更多