質問

ユーザーの入力がMySQLクエリに挿入される場合、ユーザー入力で置き換えられる危険な文字は何ですか?引用符、二重引用符、\ rおよび\ nについて知っています。他にありますか? PHPの mysql_real_escape_string などは無効です)

役に立ちましたか?

解決

mysql_real_escape_string() mysql.com docsから:

  

fromの文字列は、接続の現在の文字セットを考慮して、エスケープされたSQL文字列にエンコードされます。結果はに置かれ、終端のヌルバイトが追加されます。エンコードされる文字はNUL(ASCII 0)、“ \ n”、“ \ r”、“ \”、“ '”、& #8220;"&#8221 ;、およびControl-Z(セクション8.1“リテラル値”を参照)。 (厳密に言えば、MySQLでは、クエリ内の文字列を引用するために使用されるバックスラッシュと引用文字のみがエスケープされます。この関数は、ログファイルで読みやすくするために他の文字を引用します。)


mysql_real_escape_string()は文字セットに対応しているため、すべての機能を複製することは(特にマルチバイト攻撃の問題に対して)少々の作業ではありません。

http://cognifty.com/blog.entry/id=から6 / addslashes_dont_call_it_a_comeback.html

AS = addslashes()  
MRES = mysql_real_escape_string()
ACS = addcslashes() //called with "\\\000\n\r'\"\032%_"

Feature                                         AS     MRES    ACS
escapes quote, double quote, and backslash      yes    yes     yes
escapes LIKE modifiers: underscore, percent     no     no      yes
escapes with single quotes instead of backslash no     yes*1   no
character-set aware                             no     yes*2   no
prevents multi-byte attacks                     no     yes*3   no

他のヒント

どの言語をサポートする必要がありますか?独自のサニタイズを使用する方が、独自に作成するよりもはるかに優れています。

編集:php.netで mysql_real_escape_string を見る:

  

mysql_real_escape_string()は、MySQLのライブラリ関数 mysql_real_escape_string を呼び出します。 / code>、 \ r \ '" および \ x1a

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top