どのタイプの入力がクロスサイトスクリプティング(XSS)およびSQLインジェクション攻撃に対して最も脆弱ではありません。
PHP、HTML、BBCodeなど。友人のセットアップを支援しているフォーラムについて知る必要があります。
(コメントで投稿したばかりですが、選択リストやラジオボタンなどをサニタイズする必要がないという印象を受けている人もいるようです。)
ラジオボタンが安全であることを期待しないでください。サーバー上のデータをサニタイズする必要があります。人々は自分のローカルマシンでhtmlページを作成し、ラジオボタンと同じ名前のテキストボックスを作成して、そのデータをポストバックさせることができます。
より上級のユーザーは、WebScarabのようなプロキシを使用して、サーバーにポストバックされるときにパラメーターを微調整することができます。
経験則として、常にパラメーター化されたSQLステートメントを使用し、ユーザーが生成したデータをHTMLに入れる前にエスケープすることをお勧めします。
それらのどれもそうではありません。サーバーで期待されるすべてのデータは、知識と意欲を持った人が操作できます。人々が使用すると予想されるブラウザとフォームは、サーバー/スクリプトにデータを送信するためのいくつかの有効な方法の1つにすぎません。
XSSおよび関連する問題のトピックをよく理解してください
私たちはあなたの状況についてもっと知る必要があります。どのように脆弱ですか?あなたが常にしなければならないいくつかのこと:
ユーザーから提供されたphpを実行することは決してありません。BBCode / UBBCodeは、意味的に正しいhtmlに変換されるため問題ありませんが、不正な形式の画像タグに関連するXSSの脆弱性を調査することをお勧めします。HTML入力を許可すると、特定の要素をホワイトリストに登録できますが、これはエラーが発生しやすい複雑なアプローチになります。したがって、前述のすべてを考慮すると、優れた既製のBBCodeライブラリを使用することが最善の策であると言えます。
あらゆる種類のブール値。
無効な入力を非常に簡単にフィルタリングすることもできます。
;-)
HTMLなどの入力をサニタイズするBBコードパーサーがたくさんあります。パッケージとして利用できるものがない場合は、オープンソースフォーラムソフトウェアパッケージの1つを参照してガイダンスを得ることができます。
BBコードは、フォーラムの「標準」であるため、理にかなっています。
攻撃に対して最も脆弱でない入力は「非入力」です。
あなたは正しい質問をしていますか?
オーディンのために、入力をサニタイズしないでください。ユーザーがフォームに好きなように入力することを恐れないでください。
ユーザー入力は本質的に安全ではありません。受け入れられた答えは、オライリー氏の名前に違法な文字が含まれているため、口座を開設できない私の銀行のような種類の Web インターフェイスにつながります。安全でないのは、常にユーザー入力の使用方法です。
SQL インジェクションを回避する正しい方法は、準備済みステートメントを使用することです。データベースの抽象化レイヤーでそれらを使用できない場合は、正しいエスケープ関数を厳密に使用してください (myslq_escape など)。XSS 攻撃を防ぐ正しい方法は、striptags() のようなものではありません。すべてをエスケープする - PHP では、htmlentities() のようなものが探しているものですが、文字列を HTML テキストの一部として出力するか、HTML 属性として出力するか、Javascript の内部などとして出力するかによって異なります。適切なツールを使用してください適切なコンテキストのために。また、ユーザーの入力を直接ページに出力しないでください。
最後に、Web アプリケーションの上位 10 の脆弱性を見て、それらを防ぐために正しいことを行ってください。http://www.applicure.com/blog/owasp-top-10-2010