0

現在フォーラムを作成中です。

入力データ (つまり、ユーザーからの投稿) を MySQL データベースに送信する前にサニタイズしたいと考えています。

私はすでにそれを行うためにいくつかの機能を検索してきましたが、それらを十分に使用したかどうか、およびそれらがすべて十分に安全であるかどうかはわかりません. どんな提案でも大歓迎です。

ここに私が持っているコードがあります:

$message=$_POST['answer'];
$message=nl2br($message); //adds breaks to my text
$message=stripslashes($message); //removes backslahes (needed for links and images)
$message=strip_tags($message, '<p><a><b><i><strong><em><code><sub><sup><img>'); //people can only use tags inside 2nd param
$message = mysql_real_escape_string($message); //removes mysql statements i think (not sure)

編集: strip_tags 関数にいくつかのタグを追加する必要があるかどうか教えてください。多分私はいくつかを忘れています。

4

3 に答える 3

2

代わりに PDO を使用してみてください。バインディング機能が優れているため、セキュリティが大幅に向上します。ここにいくつかの例があります: http://php.net/manual/pl/pdostatement.bindvalue.php

PDO はデフォルトで PHP5 に組み込まれているため、最近ではほとんどどこにでもあります。

于 2012-06-10T14:41:20.293 に答える
1

フォーラムで制限された HTML を使用できるようにしたい場合 (strip_tags() の使用方法からわかるように)、 HTMLPurifier を使用します。そうしないと、これらのタグの属性で JavaScript に対して脆弱になります。

ところで、今、<br>追加したタグを削除しています

于 2012-06-10T19:51:44.187 に答える
-1

DBに保存する場合:

$message=strip_tags($message, '<p><a><b><i><strong><em><code><sub><sup><img>'); //people can only use tags inside 2nd param
$message = mysql_real_escape_string($message); //removes mysql statements i think (not sure)

出力時:

$message=nl2br($message); //adds breaks to my text
$message=stripslashes($message); //removes backslahes (needed for links and images)

その上、またはのようなhtml入力要素に書き込むときはhtmlspecialcharsを使用してくださいtexttextarea

OBS: 車輪を再発明しないでください。非常に安全なデータ管理方法を提供する、 codeigniterのような PHP フレームワークについて学びます。.

于 2012-06-10T14:43:03.863 に答える