MySQLユーザーパラメータのサニタイズ
-
04-07-2019 - |
質問
ユーザーの入力が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
。