2012-01-09 15 views
1

私のウェブサイトでライブ行く前に、私は、セキュリティに関するいくつかの考えをした:

この質問フォームを確保する上で解決のために努力PHPの処理を理解していないについてです。

xssと SQLインジェクションが完全に安全でないこのベアボーンスクリプトを考慮してください。

<? 
if ($_POST['submit']=="1"){ 

    $input = $_POST['input']; 
    echo "echo the input: ".$input."<br/>"; 
} 
?> 
<form action="<? $PHP_SELF;?>" method="POST"> 
<input type="text" name="input" value="<? echo $_POST['input'];?>"/> 
<input type="hidden" name="submit" value="1"/> 
<input type="submit" value="submit"/> 
</form> 

私はこのような、このような注射は(フィールドの入力に)動作しない理由を疑問に思って:

";unset('index.php'); 

私は単純に「考えています。エコーを終了しを進めるよりますコード。 は、実際に私は、これは動作しません非常に満足していますが、私は理由を知りたい。 このactuallう作品「OR 1」のSQLのようなもので。

私はでこれを確保するために知っていますまたはhtmlspecialcharsですが、これは問題ではありません。私はこれを処理する際にPHPがどのように機能するかを知りたい。

おかげ

+0

自分自身について: 'addslashes()'、 'mysql_real_escape_string()'、 'htmlspecialchars()'などのstring_munging関数には注意してください。 http://stackoverflow.com/questions/110575/do-htmlspecialchars-and-mysql-real-escape-string-keep-my-php-code-safe-from-inje/110576 – Cheekysoft

答えて

1

$ _POST配列要素の内容は文字列です。したがって、あなたが "; unset( 'index.php');" (btw、変数の作業を解除しない?)あなたは実際に文字列としてPHP実行可能コードとしてではなく、送信します。

eval()を使用している場合を除き、評価対象のPHPコードについて心配する必要はありません。

もう一つは、クエリを保護するためにaddslashes()を使用せず、mysqlのmysql_real_escape_string()などのライブラリの専用関数を使用してください。または、プリペアドステートメントとパラメータ化されたクエリを使用してクエリバインディングを使用することをお勧めします。

+0

こんにちは.xssに対してはhtmlspecialcharsを使用しないのですか?GETの代わりにPOSTを使用しているのですか? Email

+0

いいえ、htmlspecialchars ()やhtmlentities()は、XSS($ _POSTと$ _GETと$ _COOKIEの両方)に使用するものです。実際には、rything)。私はDBクエリを安全にすることについて話していましたが、addslashesについて話すときにあなたが言及したと思っていました。 –

+0

これを答え理由としてマークします。 thx 2 kolinkあまりにも。 – Email

1

あなたはeval()を通してそれを置く場合、それは動作しますが、それ以外の場合は、他のどのような単なる文字列です。

+0

を参照してくださいeval(unset( 'index.php')));私はあなたがevalを使用したことがないことを私に納得させる最初のものを推測します。 – Email

+0

@Email NO Eval()はphpの実行可能なコードにするために提供された文字列を_evaluate_しなければなりません; eval()がなければ、eval(unset($ var)あなたのコードで、あなたは安全だと思う_that problem_ –