2017-02-15 7 views
-3

は、だから私は、フォームを使用して、私のテーブルにデータを入力すると、SQLインジェクションを回避するために<script>が文字列内にある場合、テーブルのデータは表示されません。実行

$username = mysqli_real_escape_string($con, $_POST['username']); 

mysqli_real_escape_stringを使用停止します。このメソッドを使用すると、入力としてスクリプトを使用しようとした人の場合に、このようにデータが保存されます。<script> some bad script </script> もちろん、注入は行われませんが、テーブルからデータを取得しようとしている間に、そのように保存されたユーザー名に達すると、実行は停止します。私はテーブルを編集して<script> </script>の部分を削除してページをリフレッシュしてみましたが、期待どおり実行が停止せず正しく終了しました。テーブルからデータを取得するために次のコードを使用しました。

require_once ('dbconnect.php'); 

$title= "The App"; 


$qry = "SELECT * FROM businesses "; 
$result = mysqli_query($con,$qry); 
$info = array(); 

while($row_info = mysqli_fetch_assoc($result)) 
    { $info= $row_info; 
echo " The ID:" . $row_info['buss_id'] . "<br>" . "The username:" . $row_info['username'] . "<br>"; 
    } 

注:dbconnect.phpには$ con変数があります。ありがとうございました。 私もそれは私がチュートリアルを以下して、彼らはそのようにやった

$info=$row_info; 

、しかしはっきりと私は変数row_info $を使用して同じ結果を持つことができると言うのコードでは一部についてお尋ねしたいと思います。どんな説明も認められるでしょう。ありがとう。

+2

正常に動作します: - いいえ、それはありません。あなたはそのために 'prepared statements'を使用しなければなりません –

+0

@ Anant - ありがとうございます、頭を上げて、私はそれを探します! – Mar1ak

+0

マークアップを含まない文字列をHTMLドキュメントに表示する場合は、 'htmlspecialchars($ row_info ['username'])'を使用します。 http://php.net/manual/function.htmlspecialchars.php – Phil

答えて

1

誤解されていない場合は、フォーム入力からjavascriptを削除することです(悪意のあるjavascriptをフォーラム/メッセージボードに保存して、他のすべての訪問者に表示するなど)。

mysqli_real_escape_stringprepared statementsは、SQL injectionsに対してのみ動作します(つまり、実行されないSQL文を実行するようにプログラムを騙そうとします)。あなたのフォーム入力でそれらを使用する必要があります。しかし、それらはあなたの質問とは異なる抽象レベルでのセキュリティです。

データベースに保存する前に、または誰にでも表示する前に、テキスト入力にHTML sanitationを入力する必要があります。あなたはすべきです

  1. strip_tagsを文字列に使用してください。または
  2. filter_varを適切に使用すると、Sanitize Filterとなります。または
  3. ユーザー入力にHTMLを使用したくない場合は、htmlspecialcharを使用して、HTML保存のプレーンテキストに変換できます。
  4. データベース

    $text = addslashes(htmlspecialchars($text)); 
    

    出力に挿入する前

+0

あなたは本当のMVPです。このような機能を使用すると思いますか? function sanitize($ data) { \t return htmlentities(strip_tags(mysqli_real_escape_string($ data))); } – Mar1ak

+0

この 'sanitize()'関数をどこで使うべきかわかりません。 SQLのエスケープは、挿入前にのみ意味があります。だからあなたのコードに示されているように、DBから選択されたデータに対してそれを使うことは助けになりません。また、 'htmlentities()'を実行した場合、おそらく 'strip_tags()'を使う必要はありません。 –

+0

また、mysqli_ *関数は、(mysql_ *(http://php.net/manual/en/migration55.deprecated.php)のように)将来的に償却される古いデータベース使用スタイルです。あなたは、データベースクエリのために[PDO](http://php.net/manual/en/book.pdo.php)を学び、使うことをお勧めします。 [このチュートリアル](http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers)が役に立ちます。 –

0

$text = stripslashes(trim(implode('',explode('\\',$text)))); 

echo $text; 

これべき `SQLのinjections`回避するmysqli_real_escape_stringを

+0

ありがとうございました=) – Mar1ak

+0

あなたは大歓迎です –

関連する問題