2016-06-28 14 views
2
私は現在読んでフォームからの入力をサニタイズする適切な方法としてこれを提供しています本からPHPを学んでいる

サニタイジング:私はget_magic_quotes_gpc()がで廃止されていることを知っている以外、素晴らしいです入力PHP

function mysql_entities_fix_string($connection, $string) 
{ 
return htmlentities(mysql_fix_string($connection, $string)); 
} 

function mysql_fix_string($connection, $string) 
{ 
    if (get_magic_quotes_gpc()) $string = stripslashes($string); 
    return $connection->real_escape_string($string); 
} 

現在のバージョンのPHP。いくつかの異なるリソースを見て、私はget_magic_quotes_gpc()の代わりにSQLのprepared statementを使うべきだということを学びました。私はまだ文字列の機能的なクリーニングを行う必要があると推測するので、それは私を混乱させる。

私は(それが起こる、私はこの時には比較的新しいです)間違っていない限り、これが大きい無なしにかかわらず、準備されたステートメントの:ない

$username = $_POST['username']; 
$stmt = $conn->prepare("SELECT password FROM users WHERE username=?"); 
$stmt->bind_param("s", $username"); 
$stmt->execute(); 
... 

が、そのような場合、これは、許容できる衛生プロセス:

また、他のエスケープ機能を追加する必要がありますか?

+1

準備されたステートメントを使用すると、他のものは実行されません。 – AbraCadaver

+2

準備されたステートメントは、この種のサニタイズの必要性を否定します。データに含めたくないその他の項目は確認できますが、クエリ自体をデータから保護する必要はありません。人々がデータを「サニタイズ」しなければならなかった理由は、データをクエリに直接連結し、そのデータ*を実行可能コード*として扱うからです。クエリパラメータを持つプリペアドステートメントはその値をコードとして踏み込んでいないので、問題は解決しません。 – David

+3

ナパームとその本を燃やし、あなたのお金を取り戻す。 – PeeHaa

答えて

1

Uh no。そのサニタイズコードはゴミです。

PDOステートメントで提案されたサニタイズプロセスは問題ありません。それはあなたが必要なすべてです。

+2

さらに何が言われる必要がありますか? – naomik

+0

ありがとうございました。それはまさに私が知る必要があったものです。コメントの反発で判断すると、おそらくもっと新しい本を探し始めるだろう。これは2014年11月からのものなので、私はそれがオフになっているとは思わなかった。 – zfrisch

+3

外部リソースを使用すると、回答の質が大幅に向上します。なぜ物事が同じ効果をもたらすかもしれないのかを説明する。とにかく、それは私が[how-to-answer](http://stackoverflow.com/help/how-to-answer)から取ったものです^^ – FirstOne