最近、mysql/php を使用するニュース システムを追加しました。完全に動作しますが、html を追加するとエラーが発生します。
たとえば、YouTube ビデオを追加すると、/ または \ が追加されます
html をデータベースに保存するには、以下のコードで何を変更すればよいですか?
最終的に HTML は次のようになります。
これは、ストリップされていないスラッシュにすぎない場合があります。データを保存する前にスラッシュをエスケープしているように見えますが (よくできました!)、データを表示するときにそれらのスラッシュを削除しているようには見えません。エコーするときは、次のことを試してください。
echo stripslashes( $myrow['title'] );
ほとんどの場合、魔法の引用符が有効になっています。その場合は、これを確認して、それに応じてスラッシュを削除する必要があります。
function magic_quotes_strip($value){
if(get_magic_quotes_gpc()){
if(is_array($value)){
return array_map('stripslashes',$value);
}else{
return stripslashes($value);
}
}else{
return $value;
}
}
//Strip all slashes from post array before handling
$_POST = magic_quotes_strip($_POST);
次に、二重エスケープを心配することなく、入力の前に通常の mysql エスケープを実行します。
$title = mysql_escape_string($_POST['title']);
ノート:
PHP_SELF
XSS の脆弱性であるため、 htmlentitesを削除するか、削除する必要があります。action=""
$_SESSION[usr_name]
usr_name
定数として使用する必要があります$_SESSION['usr_name']
理由もなく過度のスラッシュを追加するコードの場所があります。
この場所を見つけて、過度のスラッシュを削除する必要があります。
これは、悪名高いmagic_quotes_gpc
ini 設定である可能性があります。オフにするか、できない場合は、上記のリンクのコードを使用して、構成ファイルの一番上にあるこれらの不要なスラッシュを削除する必要があります。
これは、ばかげた役に立たない「究極のクリーンアップ機能」である可能性があります。それを見つけて、そこからスラッシュを削除する必要があります。
これは、generate_wysiwyg()
関数内など、他の場所にある可能性があります。
覚えておいてください: stripslashes() だけを実行するのは醜い松葉杖にすぎません。データを 1 か所だけ修正して、別の場所で台無しにしておきます。