Codeigniter - 修改购物车$ product_name_rules接受任何字符是否有风险?

时间:2013-02-28 16:02:10

标签: codeigniter

我在CI中使用Cart Class,我的产品名称包含许多“危险”字符,例如撇号,括号,分号,&符号和许多非拉丁字符。

Cart Class限制允许的字符,如下所示:

var $product_name_rules = '\.\:\-_ a-z0-9'; // alpha-numeric, dashes, underscores, colons or periods

我知道我可以在MY_Cart类中扩展Cart Class并覆盖此限制:

$this->product_name_rules = '\d\D'; 

但这让我感到疑惑 - 也许CI人员有理由限制产品名称。也许通过消除限制,我正在为黑客打开一个后门。

显然,当我将购物车中的商品添加到我的数据库时,我使用Active Records和查询绑定,这应该(据我所知)提供足够的防御sql注入等。

那么首先限制角色背后的想法是什么?

2 个答案:

答案 0 :(得分:2)

NO!好吧,让我说:"没有我能看到":

虽然当我直接修改购物车核心的正则表达式时,codeigniter似乎会抛出一些错误。所以我只是通过离开那里的东西进行调整,并在最后添加/ d / D,如下所示:

var $product_name_rules = '\.\:\-_ a-z0-9\d\D'; // alpha-numeric, dashes, underscores, colons or periods

为了解决您可能不知道的原因,请尝试扩展类

你可以在这里找到指南:

  

http://ponderwell.net/2010/07/codeigniter-extending-the-cart-class-for-robust-product-names/

在应用程序/库中创建一个文件并调用它" MY_cart.php"。在该文件中,粘贴以下代码:

< ?php 
if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class MY_Cart extends CI_Cart {
    function __construct() {
        parent::__construct();
        $this->product_name_rules = '\d\D';
    }
}

答案 1 :(得分:0)

值得了解CI购物车库。因为当你制作自己的购物车时,它会让你感觉自己真的很好。 :-)严重的是,每个尝试CI推车的人都会遇到这个问题,并且有很多关于它的帖子。所以是的,你可以修改它,这样你就可以在名字中使用不同的字符 - 但我会强烈建议你尽快制作自己的购物车。

购物车在产品页面中真正需要什么?它需要产品的ID和数量。多数民众赞成 - 其他一切都应该直接来自您的产品表。

不要设置您的应用以便产品页面上有价格,然后您将该价格发送到购物车。有人可以轻松修改表格并向购物车发送较低的价格。

因此请验证产品ID - 然后直接从产品表中获取产品价格。这很简单,因为你只是为了展示产品而做到了。你也可以通过这种方式获得产品名称 - 嘿,你突然不必担心危险角色,而且你知道价格是准确的。


和Steward在使用ci cart lib方面有很好的答案,而博客文章则链接到了解决问题的步骤。你也可以复制购物车库的部分并将它们放在MY_cart中,这是一个很好的方式,看看它是如何工作的,你可以做简单的mods。