2016-11-28 10 views
4

私はすべてを試しましたが、それでもわかりません。 addslahes()str_replace()htmlentities()私は二重引用符が私のウェブサイトに表示されない理由を理解できません。DBのHTML引用符を二重引用符で囲みます

$sql = $con->prepare("SELECT * FROM `user_settings` WHERE `user_session` = '$user_session'"); 
$sql -> execute(); 

$result = $sql->fetchAll(PDO::FETCH_ASSOC); 

foreach ($result as $row) { 
    $advertising_1 = $row['advertising_1']; 
    $advertising_2 = $row['advertising_2']; 
    $website_name = $row['website_name']; 
    $website_url = $row['website_url']; 
    $statistics = $row['statistics']; 
} 
echo '<input type="text" name="website_name" placeholder="Your Website URL" value="'. $website_name. '" />' ?> 

誰かがここで間違っていると説明していただけますか?文字列の二重引用符で問題が発生します。シングルクォートはmysql_escapeで修正されましたが、廃止予定です。

+0

はあなたが考えてみましょうarif_suhail_123 @ –

+0

を挿入したいあなたの価値、のための一例を与えることができ、 '$ website_name' ='「example.com」 '(気づきます。ウェブサイト名に二重引用符 – nTuply

+0

あなたは問題がバインディングを使用している場合は、 '$ stmtは= $ dbh->( "?)、((レジストリに名前、値)の値を挿入")の準備、解決されます。 $ stmt->私はPHPマニュアルのWebサイトから、chrisリンクから得たコードです。これはあなたのコードのヒントであり、 '<?php; PHP $ str = addslashes( '"example.com"'); echo($ str ); //この$ str変数を挿入してください ?>クエリがうまくいけば –

答えて

3

ブラウザに出力するデータをエスケープするには、htmlspecialcharsを使用し、すべての引用符がエンティティに変換されるように引用定数(ENT_QUOTES)を使用します。これはXSSの注射が防止/実行される方法でもあることに注意してください。要素/属性は、想定されていないときに閉じられ、悪質なコードが書き込まれます。

echo htmlspecialchars('Encode all of these "test" test \'test \'', ENT_QUOTES); 

出力:

Encode all of these &quot;test&quot; test &#039;test &#039; 

と、ブラウザで:

エンコードこれら"テスト"テスト'テストのすべて'

また、あなたは、DISコードからあなたは準備された陳述を悪用しています。値はバインドする必要があり、クエリに連結する必要はありません。このようにして、PDOドライバは引用/エスケープ処理を行います。これにより、今後も同様の問題が発生する可能性があります。また、SQLインジェクションを開きます。準備された文の詳細については

は、以下を参照してください http://php.net/manual/en/pdo.prepared-statements.php

+0

優れています。完璧に働いた。私は今、適切なPDO準備文を書く方法について読んで、同じミスを未然に防ぐことはしません。クイック質問しかし、セキュリティ上の問題とそれを防ぐ方法についてもっと学ぶための有益な情報源? – nTuply

+0

これは幅広い話題ですが、このサイトにはいくつかの良い文書がありますが、PHPに固有のものではありません(https://www.owasp.org/index.php/Main_Page)。 – chris85

+0

優秀!ありがとう。 – nTuply

関連する問題