1

私はこのトピックについて 15 以上の投稿を読んで読んだので、このトピックが非常に広範囲に議論されていることを知っていますが、それでも私の質問に対する答えが見つかりません。

フォームからデータをサニタイズする関数を探しています。HTMLは絶対に受け入れられないため、ユーザーが何も挿入できないように、すべてのhtmlエンティティをエスケープするにはどうすればよいですか? 入力 HTML が許可されていないため、ホワイト リストは必要ありません。

また、MySQL データベースを使用しないため、mysql_real_escape_string を実行する必要はありません。私はMongoDBを使用しています。名前、姓、電話番号、基本的なものを保存しているだけです。HTMLなし。しかし、私はまだユーザーが自分の名を入力できるようにしたくありません<script>whatever</script>。それが表示されたときに、それを解析します。

HTML PurifierhtmLAWEDについて考えましたが、私がやろうとしていることには多すぎるようです。派手な preg_replace 関数を作成するだけですか?

4

7 に答える 7

2

普遍的な「安全にする」フィルターはありません。文字列は、特定のコンテキストに配置された場合にのみ危険です。

たとえば、コンテキストがプレーンテキストのドキュメントである場合、実際には何の心配もありません。

コンテキストがテキストノード(山括弧内ではない)の場合は、htmlspecialcharsで十分です。サーバーから送信されるhttpヘッダーのcharset/encodingである正しいcharset/encodingを指定します。

わかった

   <p><?= htmlspecialchars($input, ENT_QUOTES, 'UTF-8'); ?></p>

ただし、山かっこ内に出力する必要がある場合は、コンテキストを次のようなhtml属性のようにします。

<p <?= htmlspecialchars($input, ENT_QUOTES, 'UTF-8'); ?>   ></p>
or
<p title="<?= htmlspecialchars($input, ENT_QUOTES, 'UTF-8'); ?>"   ></p>

多くの場合、「安全にする」タスクは非常に困難になります(レガシーブラウザには、ソフトウェア開発者の一般的な期待に反する絶対に当惑するバグがいくつかあります)。巨人の肩の上に立ってhtmlpurifierのようなものを利用しないのは愚かなことです。

于 2012-10-25T15:32:18.217 に答える
0

私はそのようなことの専門家ではありませんが、アングルブラケットをstr_replaceするだけではいけませんか?

于 2012-10-25T14:58:13.857 に答える
0

私は preg_replace を使用すると言いますが、人の名前に現れる可能性のあるアクセントやその他の珍しい文字に注意する必要があります。

于 2012-10-25T15:01:35.710 に答える
0

PHP のデータ フィルタリング ( http://php.net/manual/en/book.filter.php ) を調べてみてはどうでしょうか。

サナタイズ: http://php.net/manual/en/filter.filters.sanitize.php

確実で安全なライブラリが本当に必要な場合は、OWASP の ESAPI for PHP をチェックしてください。

独自のセキュリティ コントロールを記述しないでください。すべての Web アプリケーションまたは Web サービスのセキュリティ制御を開発する際に一からやり直すと、時間の浪費と膨大なセキュリティ ホールが発生します。OWASP Enterprise Security API (ESAPI) ツールキットは、ソフトウェア開発者がセキュリティ関連の設計および実装の欠陥から保護するのに役立ちます。

于 2012-10-25T15:09:31.583 に答える
0

サニタイズの定義: 山かっこをエスケープしますか、それとも HTML タグを削除しますか?

逃げるために見てください

htmlentities() 

削除するには、以下をご覧ください

strip_tags()
于 2012-10-25T15:06:01.897 に答える
0

HTML ページのフローからそれらを削除するような方法ですべての HTML 特殊文字をフォーマットするだけで使用するのが好きなものは次のとおりです。

htmlspecialchars($string);

>複雑で遅い置換機能などを使用する必要があることを解決し、ユーザーがユーザー名やコメントなどを削除せずに使用できることを意味します(つまり、インターネットで非常に有効なユーザー名は です>3)。

于 2012-10-25T15:07:22.880 に答える
0

PHP 5.3 の filter_input http://php.net/manual/en/function.filter-input.phpを使用します。

$string = filter_input(INPUT_POST, 'string', FILTER_SANITIZE_SPECIAL_CHARS);

これは $_POST['string'] によく似ていますが、クリーナーが組み込まれています。

于 2012-10-25T15:15:13.217 に答える