0

CI で Cart クラスを使用していますが、製品名には、アポストロフィ、角かっこ、セミコロン、アンパサンド、および多くの非ラテン文字など、多くの「危険な」文字が含まれています。

Cart クラスは、許可される文字を次のように制限します。

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

Cart クラスを拡張して、この制限を MY_Cart クラスで次のようにオーバーライドできることはわかっています。

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

しかし、これは疑問に思います。おそらく、CI の人々が製品名を制限する理由があったのでしょう。おそらく制限を取り除くことで、ハッカーにバックドアを開いているのでしょう。

明らかに、カートからデータベースにアイテムを追加するときは、アクティブ レコードとクエリ バインドを使用します。これにより、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/

application / librariesにファイルを作成し、「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を確認してから、製品テーブルから直接製品価格を取得します。製品を表示するためにそれを行ったので、それは簡単です。そのようにして製品名を取得することもできます。突然、危険なキャラクターについてまったく心配する必要がなくなり、価格が正確になることがわかります。


スチュワードは、ci cart libを操作するための優れた回答を持っており、彼が問題のステップにリンクしているブログ投稿もあります。カートライブラリの一部をコピーしてMY_cartに入れることもできます。これは、カートがどのように機能するかを確認するための良い方法であり、簡単なmodを実行できます。

于 2013-03-01T02:36:57.903 に答える