1

私はCakePHPでFCKEditorを使用しています。エディタから送信されたデータを保存するときに、htmlspecialchars()およびmysql_real_escape_string()関数をデータに適用してデータベースに保存する前に、そのデータを消去します。問題は、CakePHPフレームワーク内でこれをどこで行うのか本当にわかりません。CakePHPにデータを保存する際にmysql_real_escape_stringとhtmlspecialcharsを使う最良の方法は何ですか?

function add() 
{ 
    if (!empty($this->data)) 
    { 
     if ($this->Article->save(mysql_real_escape_string(htmlspecialchars($this->data)))) 
     { 
     $this->Session->setFlash('Your article has been saved.'); 
    $this->redirect(array('action' => 'index')); 
     } 

    } 
} 

しかします$ this->データが配列され、それが動作しませんので、これらの機能は、文字列を期待する:私はこのようなコントローラでみました。私はモデルのバリデーション配列でそれを行いますか?何も思いつきません。また、mysql_real_escape_string()の中でhtmlspecialchars()を実行するのが良い方法でないかどうかを教えてください。あなたがデータを保存とき

答えて

3

はとき出力データHTMLにそれを使用し、htmlspecialchars()を使用しないでください。 HTML以外の状況でデータを見る必要がある場合はどうすればよいですか?

また、私はケーキのユーザーではありませんが、データを保存するときにmysql_real_escape_string()を適用する必要がある場合は驚いています。データベースアクセスレイヤーはSQLインジェクションからあなたを守り、手動で行うことで二重にエスケープされた文字列を格納することになります。

+0

は、あなたがここで私を矯正するために、両方いただきありがとうございます。私はフレームワークがそれを独自に行う可能性については考えなかった。両方とも24kの評判を持っているので、私はあなたの言葉をそれに服用させてくれると思います。 :) – ryanulit

+0

@ryanulit:私は24の評判を持っています。私は "k"がどこから来るか分かりません。 – Tomalak

+0

@ryanulit:あなたは私たちの言葉を取る必要はありません。異なるレベルのエスケープを適用したテストデータを挿入し(このテストには特殊文字を含めてください)、テーブルをクエリして何が挿入されたかを確認します。 –

1

データベースアクセスが抽象化されていれば、これらの関数をまったく呼び出す必要はありません。

文字列のビットから実際のSQLを構築する必要があるのは、唯一の場所です。とにかくやってはいけないことですが、それは別の話です。

ボトムラインは - フレームワークは適切なことを行い、干渉しません。

編集:Bill Karwinが指摘しているように、htmlspecialchars()は完全に間違った部門からです。

+0

ORMを使用していても、手作業でSQLを記述する必要があることがあります。しかし、OPの質問の場合はありません。 –

+0

@Bill Karwin:これは、私が「してはいけない」と反対の、「してはいけない」と言った理由です。はさみで走るようなものです。あなたが何をしているのか分かっていれば、まったく無害です。 :) – Tomalak

1

あなたは、CakePHPを使用して独自のSQL文字列を構築している場合、CakePHPは、エスケープ機能を提供します。

escape(string $string, string $connection) 

http://book.cakephp.org/view/1186/escape

関連する問題