3

base64_encodeフォームからhtmlを保存<textarea>し、データベースにデータを保存するために使用しています。取得時base64_decodeに使用され、データはテキストエリアに配置されます。を使用せずにこれを行うのは安全mysql_real_escape_string()ですか?

templatemysql_real_escape_stringのパラメーターを取得するときに使用します。$_GETid

templates.php?id=4

ただし、base64 を使用して html を保存すると、テキストエリアに追加される悪意のある SQL コードも保存されます。これまでのところ、問題はありませんでした。

代わりにbase64を使用するのは悪い習慣mysql_real_escape_string()ですか?

「仕事のための間違ったツール」?

注: htmlspecialchars($text, ENT_QUOTES);xss に使用します。

4

2 に答える 2

3

技術的base64_encodeには、SQL インジェクションに使用できるものは何も出力されません。その限りでは、安全です。

ただし、クエリで使用されるパラメーターは常にSQL エスケープするか、最初は常にパラメーター化されたクエリを使用することを習慣にしています (実際には、時代に合わせてください!)。より単純で、簡単で、後でコードを変更しても問題が発生することはありません。

于 2012-05-18T08:31:33.070 に答える
2

はい、base64 文字列はデータベースで安全に使用できます。しかし、それにはいくつかの欠点があります。

  • 文字列がデータベースに入る/存在するたびに、文字列をエンコードおよびデコードする必要がありますが、エスケープ/準備するときは、1つだけ行う必要があります。
  • スペースを無駄にしています。base64 文字列は、元の文字列よりも約 33% 大きくなります。

最善の策は、最新の MySQL ドライバー (mysqliまたは などPDO) に移行し、準備済みステートメントを使用することです。何らかの理由でそれが不可能な場合は、 に固執してmysql_real_escape_stringください。

于 2012-05-18T08:41:38.047 に答える