CakePHPの中のデータを保存しながら、mysql_real_escape_stringのとはhtmlspecialcharsを使用するための最良の方法は何ですか?
-
12-09-2019 - |
質問
私は、CakePHPでFCKEditorのを使用していますが、私は編集者から送られたデータを保存するとき、私は私のデータベースに格納する前にそれをきれいにするデータにはhtmlspecialchars()とmysql_real_escape_stringの()関数を実行したいです。問題は、私はどこCakePHPの枠組みの中でこれを行うには本当にわからないです。
:私はこのようなコントローラーで試してみました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を実行すると良い習慣ではない場合、私に知らせます。
解決
保存
のデータ、あなたがHTMLにの出力のデータをするときにそれを使用htmlspecialchars()
を使用しないでください。あなたがHTML以外のいくつかの文脈でデータを見る必要がある場合はどうでしょうか。
また、私はケーキのユーザーではないんだけど、あなたはどちらかのデータを保存するようmysql_real_escape_string()
を適用する必要がある場合、私は驚かれることと思います。データベースアクセス層は、SQLインジェクションに対して、あなたが二重にエスケープ文字列を格納して終了するつもり手動でそれを行うことで、あなたを保護する必要があります。
他のヒント
短くてシンプルな答えは - データベースアクセスを抽象化されている場合、あなたはすべてのこれらの関数を呼び出すための必要はありません。
あなたは、文字列のビットから実際のSQLを構築する場合は、彼らが必要とされる唯一の場所です。これはあなたがとにかくやるべきではありませんが、それはまた別の話だ。
ボトムラインは - フレームワークは干渉しない、正しいことを行います。
。編集:ビルKarwinが指摘するように - htmlspecialchars()
は、ここでは完全に間違っ部門からです。
あなたは、CakePHPを使用して独自のSQL文字列を構築している場合は、その後、CakePHPは、エスケープ機能を提供します:
escape(string $string, string $connection)