2012-03-11 13 views
-4

私たちは、PHP/MySQLの準備stamtementsにSQLインジェクションについて話すときに移動するための方法であっても私たちはそれが十分であるかどうかわからないではないが、私は防ぐために、他の効率的な回避策があるかどうかを知りたいことを知っていますSQLインジェクション。php/mysql Webアプリケーションでprepared statement以外のSQLインジェクションを避けるためのオプションはありますか?

また、私は基本的なSQLインジェクション攻撃を避けるための試みで文字列を解析するために、この小さな機能を持っています。ユーザーは、それらの入力に入るかもしれないが、私はそれらの文字を許可した場合でも、それはほとんど同じ働くだろう把握、それはいくつかの基本的な文字を置き換えるため

function cleanString($str) { 
$strEncoding = mb_detect_encoding($str) != 'UTF-8' ? 'ISO-8859-15' : 'UTF-8'; 
$str = trim($str); 
$str = preg_replace('/(\s|\%20){2,}/', ' ', $str);// Elimino espacios 
$str = preg_replace('/\t|\%09|\%0b|\%0B/', ' ', $str);// Elimino tabulaciones 
$str = preg_replace('/\n|\r|\%0a|\%0A|\%0d|\%0D/', '', $str);// Elimino entradas de nueva línea 

// Caracteres especiales más importantes ", &, ', (,), -, ;, <, =, >, `, ~ 

$str = preg_replace('/\(|\)|\-{2}|;|`|~/', '', $str);// Elimino algunos caracteres especiales 
// Elimino cadenas y secuencia de bytes sospechosas 
$str = preg_replace('/((0x2)(2|6|7|8|9|d|D))|((0x3)(b|B|c|C|d|D|e|E))|0x60|0x7e|0x7E/', '', $str); 
$str = preg_replace('/\%22|\%26|\%27|\%28|\%29|\%2d|\%2D|\%3b|\%3B|\%3c|\%3C|\%3d|\%3D|\%3e|\%3E|\%60|\%7e|\%7E/', '', $str); 

return htmlspecialchars($str, ENT_QUOTES, $strEncoding); 
} 

関数は((、)、)文字列に影響を与えます。

+1

MySQLの文で使用するために文字列をエスケープするために 'mysql_real_escape_string'機能を使用することは好ましくない? – dldnh

+3

ユーザー入力を受け入れないでください。それから彼らは何も注入することはできません。 ;) –

+2

独自のコードを書くのではなく、あなたのための引用符を扱う準備された文やデータベースライブラリを使用してください。それで十分です。 –

答えて

0

ジャスト(mysql_real_escapeで入力をフィルタリングする)、およびはhtmlspecialchars()、注射を停止し、XSSを停止します(?)。しかし、パラメータのバインドとクエリの準備がより良いです。

関連する問題