0

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

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

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

我知道我可以扩展 Cart 类并在 MY_Cart 类中用类似这样的东西覆盖这个限制:

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

但这让我想知道——也许 CI 人有理由限制产品名称。也许通过消除限制,我为黑客打开了后门。

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

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

4

2 回答 2

2

不!好吧,让我说:“我看不到”:

虽然当我直接修改购物车核心的正则表达式时,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';
    }
}
于 2013-03-01T05:34:35.683 回答
0

值得了解 CI 购物车库。因为当你制作自己的购物车时,它会让你对自己感觉非常好。:-) 说真的,每个尝试 CI 购物车的人都会遇到这个问题,并且有很多关于它的帖子。所以是的,您可以修改它,以便您可以在名称中使用不同的字符 - 但我会认真敦促您尽快制作自己的购物车。

购物车在产品页面上真正需要什么?它需要产品的 ID 和数量。就是这样 - 其他一切都应该直接来自您的产品表。

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

所以验证产品 ID - 然后直接从产品表中获取产品价格。这很容易,因为您这样做只是为了展示产品。您也可以通过这种方式获得产品名称 - 嘿,突然间您完全不必担心危险字符,而且您知道价格会准确无误。


Steward 对使用 ci cart lib 有很好的回答,他链接到的博客文章逐步解决了这些问题。您还可以复制购物车库的一部分并将它们放入 MY_cart,这是了解其工作原理的好方法,您可以进行简单的 mods。

于 2013-03-01T02:36:57.903 回答