0

私はしばらくの間、PHP と MySQL の (基本的な) 方法を学んでおり、非常に満足しているいくつかのものを微調整/構築しました。現時点ではかなり行き詰まっているので、正しい方向に向けていただければ幸いです。

ユーザー入力によってもたらされる XSS と SQL インジェクションのリスクに関する太字の説明をすべて読んだので、常に用心するつもりです。これまでのところ、クライアントからのキューを最小限に抑え、可能な場合は基本的な比較にとどめようとしました。しかし今、私は一連のテキストを処理する必要があるプロジェクトに取り組んでいます (いくつかのドロップダウンとともに)。

これまでのところ、私は次のように動作するテストミュールを持っています:

  1. ユーザーはドロップダウンを設定し、テキストのチャンクを (テキストエリアに) 入力し、フォームを送信します。

  2. ハンドラー ページは、確認のためにフォーム データをユーザーにエコーし、このページの別のフォームの非表示の値を入力します。これは [確認] ボタンで送信されます。

  3. 「Final」ハンドラーは mysql_query を実行して、処理されたフォーム データを含む行を挿入します。

本質的には、$submittedText文字列を取得し、それを変更して、確認プレビュー (エコー) と MySQL データベースへの挿入の両方で、悪意のある入力が無害になるようにします。しかし決定的に、改行を保持すると、ユーザーは無意識のうちにテキスト領域に入力されます。

私は使用しています:

<?php

 $submittedText = $_POST['Text'];    
 $processedText = nl2br(htmlentities($submittedText, ENT_QUOTES, 'UTF-8'));
 echo $processedText;

?>

...私の確認のために、それは私が投げたものを安全にするようです。また、$processedTextスルーを通過するとmysql_real_escape_string、データベースの問題は発生しません。私の問題は、もう一度元に戻したいときに発生します...

私は使用できると考えました:

$processedOutput = strip_tags($databaseText, '<br>');

...これは HTML/<script>タグをキャッチし<?php // ?>ますが、データベースから読み取られたテキストに含まれていた場合は、PHP を実行するときにプリプロセッサによって解析されます。これにより、少なくとも予期しない結果が生成され、他の意地悪。悪意のある入力を無効にすることにこれ以上成功すると、改行が殺される傾向があります。

誰かが私を正しい方向に向けることができれば、私は永遠に感謝します.

どうもありがとう、

ロブ。

4

1 に答える 1

0

確認ページで、2 つの変数を使用します。1 つはユーザーに出力し、もう 1 つはデータベースに送信します。

$submittedText = $_POST['Text'];    
$processedText = nl2br(htmlentities($submittedText, ENT_QUOTES, 'UTF-8'));
$sqltext = mysql_real_escape_string($submittedText);
// use $sqltext to insert into the database
// user $processedText to print to the user on the confirmation page.

テキストを元に戻すと、ユーザーに出力したい形式に文字列を再度フォーマットできます。

于 2013-07-03T01:45:21.563 に答える