代码点火器:允许在URI中使用撇号';s,而为了安全起见,依赖于查询绑定


Code Igniter: allowing apostrophe in URI's while depending on Query Bindings for safety

我一直在想如何让撇号的URI交叉。

我正在建立一个允许用户"创建相册"的网站。我有一个链接,点击后,它将加载并显示某个相册的所有内容。我正在使用codeigniter,所以这个页面是这样命名的:

http://www.fourthdraft.com/index.php/admin/manageAlbumContents/dan's/91

admin=控制器managealbums=函数dan(专辑名称)=可变

正如您所知,codeigniter不允许在uri中使用撇号(')。我的问题是:

  1. 如果我有特殊的零件它变成的专辑名称&xx;那些新角色也不是允许的
  2. 如果我对url进行编码,它将变为%xx。允许百分比,但代码点火器在处理之前对其进行url解码它只是变回撇号
  3. 我试着做我自己的preg_replace('=>'~apos~'),但我只是觉得效率低,太多了线路运行和乏味,因为我有一个80%完成的网站和我必须替换的字符串是无处不在
  4. 我还考虑过使用base64_encode。它需要更多的空间但它确实起到了作用。然后编码版本包含"="也被禁止

尽可能地,我不想只在codeigniter的配置文件中的允许字符列表中添加撇号。我相信他们没有它是有原因的。与此同时,我已经没有选择了。之所以要允许使用撇号,是因为在这种情况下,它一定会被使用。例如,如果有人决定把"丹的生日聚会"作为专辑名称,该怎么办?这是必然发生的。我确信我的用户会抱怨。即使我设法说服了他们,我会用什么来代替它?丹的生日聚会?看起来不对。此外,如果脸书能做到这一点,我也应该做到。至少,如果脸书做到了,那就意味着有办法。

如果你们有任何建议,请立即提出。否则,我想知道在允许的URI字符中只允许撇号是否可以(并且安全)。我知道这对我经常使用的mysql来说非常危险,但我只记得codeigniter的查询绑定变量会自动转义字符。我想知道这是否足以保证我的安全。

否则,请给我一个好主意。我的用完了

我相信mysql_query("SELECT * FROM table WHERE x={$_GET['val']}")的日子已经结束了。话虽如此,只要使用参数绑定,任何像样的数据库库都可以。所以继续使用urlencode