ショー
このドキュメントに付属するファイルは、このページ、または「ファイルのダウンロード」の「文字処理」セクションでダウンロードできます。このドキュメントでは、書式設定されたユーザー入力を安全に表示する方法について説明します。サニタイズされていない出力の危険性について説明し、フォーマットされた出力を表示する安全な方法を紹介します。
フィルタリングされた出力の危険性はありません
ユーザー入力を取得して表示するだけの場合、送信された入力ボックスに JavaScript スクリプトを悪意を持って埋め込むことができるため、出力ページが破損する可能性があります:
これは私のコメントです
<。 script language="javascript:
alert('Do something bad here!')">.
このようにすると、ユーザーに悪意がない場合でも、テーブルが突然中断されるなど、HTML ステートメントの一部が破壊されます。 、またはページの表示が不完全です。
書式なしのテキストのみを表示する
これは最も簡単な解決策で、ユーザーが送信した情報を書式なしのテキストとして表示するだけです。 htmlspecialchars() 関数を使用して、すべての文字を HTML エンコーディングに変換します。
たとえば、 は に変換され、不適切なタイミングで予期しない HTML タグが出力されなくなります。
これは、ユーザーが書式設定されていないテキスト コンテンツのみを気にする場合に適したソリューションです。ただし、フォーマット機能を追加した方がよいでしょう。
カスタム マークアップ タグによる書式設定
書式設定用のユーザー独自のマークアップ
ユーザーが使用できる特別なタグを提供できます。たとえば、...強調、...斜体の使用を許可できます。単純な検索と置換操作で十分です: $output = str_replace("", "", $output);
$output = str_replace("", "
もう少し改良して、ユーザーがいくつかのリンクを入力できるようにします。たとえば、ユーザーは [link="url"]...[/link] を入力できます。これを ステートメントに変換します
単純な検索と置換の場合は、置換に正規表現を使用する必要があります:
$output = ereg_replace('[link="([[:graph:]]+)"]', '
ereg_replace() の実行は次のとおりです:
[link="..."] が表示される文字列を検索し、それを [[:graph: ]] は空でない文字を意味します。正規表現については関連記事を参照してください。
Outputlib.php の format_output() 関数は、これらのタグの変換を提供します。 全体的な原則は次のとおりです。
htmlspecialchars() を呼び出して HTML タグを特別なエンコーディングに変換し、表示すべきでない HTML タグを除外します。
次に、一連のカスタム タグを対応する HTML タグに変換します。
以下のソースコードをご覧ください:
<?php
function format_output($output) {
/*************************************************** ************************
* 生の文字列 ($output) を取得し、同様のマークアップを取り除いた特別な
* を使用して出力用にフォーマットします。 HTML へ
********************************************** *****************************/
$output = htmlspecialchars(stripslashes($output));
/* new段落 */
$output = str_replace('[p]', '<p>', $output);
/* 太字 */
$output = str_replace('[b]', '<b>', $output);
$output = str_replace('', '</b>', $output);
/*斜体 */
$output = str_replace('[i]', '<i>', $output);
$output = str_replace('', '</i>', $output);
/* フォーマット済み */
$output = str_replace('[pre]', '
', $output);<br>$output = str_replace('[/pre]', '</pre>', $output);<br><br>/* インデントされたブロック (blockquote) */<br>$output = str_replace('[indent]' , '<blockquote>', $output);<br>$output = str_replace('[/indent]', '</blockquote>', $output);<br><br>/* アンカー */<br>$output = ereg_replace('[ anchor="([[:graph:]]+)"]', '<a name="%5C1"></a><br>/* リンク、JavaScript を防止しようとしていることに注意してくださいリンク内 */<br>$output = str_replace('[link="javascript', '[link=" javascript', $output);<br>$output = ereg_replace('[link="([[:graph:]]+ )"]', '<a href="\1">', $output);<br>$output = str_replace('[/link]', '</a>', $output); <br><br>return nl2br ($output);<br>}<br><br>?> <br><br>注意すべき点:<br><br> この呼び出しの前ではなく、htmlspecialchars() 関数を呼び出した後にカスタム タグを置き換えることを忘れないでください。 htmlspecialchars() を呼び出した後は、労力が無駄になります。 <br><br> 変換後は検索HTMLコードが二重引用符「になります」などに置き換えられます<br><br>nl2br() 関数は、同じく htmlspecialchars() の後に、キャリッジ リターンとライン フィード文字を <br> タグに変換します。 <br><br> [links=""] を <a href="" javascript></a><br>outputlib.php<br>ブラウザでtest.phpを呼び出すと、format_output()の使用法が表示されます<br><br>通常のHTMLタグは使用できません。次の特別なタグに置き換えてください: <br><br>- これは<b>太字です</b> <br>-これは <i>斜体</i><br> - これは [link="http://www.phpbuilder.com"]リンク[/link]です<br> - これは [anchor="test"]アンカー、および [link ="アンカーへの #test"]リンク[/link]<br><br>[p]paragraph<br>[pre]pre-formatted[/pre]<br>[indent]staggered text[/indent]<br><br>これらはタグのほんの一部です、もちろん、ニーズに応じて自由にタグを追加できます<br><br>結論<br>結論<br><br>このディスカッションでは、次のプログラムで使用できるユーザー入力を安全に表示する方法を提供します<br><br>メッセージボード<br>ユーザーの提案<br>システムアナウンス<br> BBS システム <br> <center> </center> <p style="width:100%;text-align:center;margin:10px 0"> <br> <br> </p><p style="width:100%;text-align:center;margin:10px 0"> </p><p class="clear"></p>