【问题标题】:encrypting uri segments in Codeigniter在 Codeigniter 中加密 uri 段
【发布时间】:2011-05-31 11:06:37
【问题描述】:

我想加密我的 uri 段,这些段作为 ID 传递以查询到数据库表中。

例如我正在使用

$id=urlencode($this->encrypt->encode($user['id']));

使用

在另一个控制器上解码
$id_decrypt=$this->encrypt->decode(urldecode($id));

我已经测试了加密和解密,它似乎工作。但是在尝试网址时,例如。

http://localhost/app_name/index.php/profile/view_profile/b98N98YNqoEA7yI1tavIY1s51RhiSHKGCFarU4A6XgFUMB%2BI3KwiEA23h1XITmkq1qPABqGs8e1sdP16v4og8g%3D%3D

在某些 url 上它会按预期工作,但在某些 url 上会出现浏览器错误 404(找不到对象)。在删除加密段时,我可以访问索引功能。这可能是什么原因?

【问题讨论】:

    标签: url codeigniter security codeigniter-url


    【解决方案1】:

    在文件 ./application/config/config.php 中有一个允许 uri 字符的部分。默认字符为:

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

    在一些项目中,我也改变了这一点:

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

    但是,正如 CodeIgniter 工程师所说的那样

    除非您完全了解后果,否则请勿更改此设置!!

    【讨论】:

      【解决方案2】:

      我认为您遇到的问题与+ 符号有关。 %2B 解码后变成+。 CI 的 URL 路由器对解码的 url 进行操作。

      + 是 url 中用于表示空格的特殊字符。这可能会触发 url 路由器。


      更新:

      这实际上可能与 CI 中的 XSS 保护脚本有关。有一个接受的 URL 字符列表,用于检查输入。您使用的加密确实在您的输入中加入了许多有趣的字符。 (%3D=)。这些(包括 +)可能是问题所在。

      解决这个问题:

      • 您可以使用不同的加密算法。你知道不会添加时髦的字符。
      • 您可以对结果进行 Base64 编码。 Base64 不应该返回字母数字字符以外的任何内容(如果我没记错的话)。但请注意,它会使结果的长度更大
      • 不推荐)您可以在 CI 配置的 xss 过滤部分编辑“允许的字符”。

      【讨论】:

      • 这似乎是真的,大多数不起作用的 url 中都有 %2B。你知道我如何删除它吗?除了 + 之外,我还应该关注其他字符吗?因为一些 url 没有 %2B 但它们不起作用。
      • 我现在意识到带来问题的是 %2F,它是 '/'。使用 Base64encode 会删除其他字符,但带有 = 显然路由器似乎也有一些问题。
      猜你喜欢
      • 1970-01-01
      • 2012-06-20
      • 2016-09-07
      • 1970-01-01
      • 1970-01-01
      • 2013-06-19
      • 2012-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多