2012-01-04 2 views
1

mysqlのimageにmysql_real_escape_string()を使用する必要がありますか?たとえば、

$data = file_get_contents($_FILES['image']['tmp_name']); 
    $data = mysql_real_escape_string($data); 
    mysql_query("INSERT INTO table set image='$data'.... 

これはに固執するための正しい方法ですか?

+0

なぜか? :O – Anonymous

+1

エンコーディングタイプ、データタイプ、その他の要因により、データの完全性が失われる可能性があります。 – khael

+1

mysql拡張機能は古くなっており、廃止予定です。新しいコードでは、mysqliまたはPDOを使用する必要があります。どちらも準備済みの文のサポートなどの重要な利点があります。プリペアドステートメントパラメータはSQLインジェクションに対して脆弱ではありません。 – outis

答えて

0

SQLインジェクションを防止するための良い方法として、削除する理由がないかぎり、それを保存することをお勧めします。ここをクリックしてください:http://php.net/manual/en/function.mysql-real-escape-string.php

ユーザーがアップロードする可能性のあるイメージや、クライアントが誤って使用する可能性のあるイメージを通じてSQLインジェクションを実行する可能性があります。

これを使用しない理由は、パフォーマンスになる可能性があります。私はパフォーマンスよりもセキュリティを推奨する傾向があります。

6

base64_encodeを使用してデータの整合性を保ち、どんな種類の文字にも問題がないことを保証することができます。実際には、データを保持して転送するのは非常に一般的な方法です。そしてそれを戻すにはbase64_decodeを使用してください。

+1

+1、ニースのソリューション! – Dessus

+0

base64を使用する際のポイントは何ですか?なぜbase64で、AESやuuencodeではないのですか?なぜ無駄なコンバージョンが起こるのですか? –

+0

@ Col.Shrapnelまあそれは役に立たないわけではありません。 AESは遅く、暗号化用です。 base64には、あなたの日を台無しにする特別な文字はありません。そして、それは素晴らしい出力文字列を持ち、それほど遅くはありません。そして、セキュリティ上の問題を非常にうまく解決するのが最善の部分です。 – khael

関連する問題