2

ユーザーがメモを追加するテキスト領域もあります。次のページでは、を使用し$_POST[Comments]て入力内容を示します。戻って入力内容を確認し、メモを編集するための編集ボタンがありますが、表示する$_POST[Comments]と、アポストロフィまでのすべてが表示されます。

例:

最初に入力したもの:Let's try this.

編集時:Let

これをサーバーに渡してSQLの追加を行うときは、次の関数を使用してSQLインジェクションから保護します

function keepSafe($value) {
        if (get_magic_quotes_gpc()) {
            $value = stripslashes($value);
        }
        if (!is_numeric($value)) {
            $value = "'" . mysqli_real_escape_string($value) . "'";
        }
        return $value;
    }

以下は、SQL挿入用の入力をフォーマットするために使用するものです。

$Comments = str_replace("\n","<br />",$_POST['CustComments']);
    $Comments = keepSafe($_POST['Comments']);

送信前に編集するときは、メモセクションのすべてのアポストロフィを確認できる必要があります。そして、私が提出するとき、それがSQLインジェクションによって防止された安全なコードであることを確認したいと思います。

4

2 に答える 2

7

アポストロフィの問題:

おそらく次のような入力を使用します。

<input type='text' value='<?php echo $value;?>'/>

問題は、値にアポストロフィがある場合、次のようになることです。

<input type='text' value='Let's play'/>

したがって、変数にアポストロフィがあるため、値タグが終了します。

これを修正するには、ENT_QUOTES で htmlspecialchars を使用します。

<?php 
 $value = htmlspecialchars("Let's play", ENT_QUOTES);
?>
<input type='text' value='<?php echo $value; ?>'/>

そうすれば、アポストロフィがエンコードされ、フォームで編集可能になります

SQL インジェクションについて:

mysqli の準備済みステートメントを使用するだけで問題ありません。XSS からも安全に保つために、常にhtmlspecialcharsHTML 出力でユーザー入力を行ってください。さらに良いのは、入力を必要なものだけにフィルタリングし、フィルタリングされた入力のみをデータベースに保存することです。

于 2012-12-04T21:13:05.830 に答える
-1

htmlspecialchars()textareaタグを作成するときに関数を使用します。

<textarea><?=htmlspecialchars($_POST['Comments'])?></textarea>
于 2012-12-04T21:29:00.667 に答える