web-dev-qa-db-ja.com

入力フィールドでの特殊文字の許可に関するセキュリティの問題

ユーザーが任意の文字(特殊文字-~!@#$%^&*()_-+=|\{}[];:'"<,.>)も入力フィールドに入力できるようにする必要があるWebアプリケーションを構築しています。それらによって引き起こされる問題を軽減するために、私は2つのことに注意しています-

  1. SQLインジェクション-パラメータ化されたクエリの使用
  2. クロスサイトスクリプティング-DOMに追加する前にHTMLがユーザー入力をエスケープします。

それで十分ですか、それとも何か不足していますか?

[〜#〜] edit [〜#〜]より良いコンテキストを提供するために、フローを説明しています。

私のWebアプリケーションでは、ユーザー入力は直接データベースに送られます。データベースからフェッチされて、HTML(HTML要素の属性とスタイルも設定)とJSONが作成されます。 HTMLの作成中に、フェッチした値をデータベースからエスケープしています。

JSONの作成中、取得した値をエスケープしていません。このJSONは、別のアプリケーションでHTMLを作成するために使用されます。また、HTMLに挿入する前に値がエスケープされることを確認しています。

2
Moazzam Khan

特殊文字などありません。

それはすべて、アプリケーション内で入力が使用されるコンテキストに依存します。 SQLiおよびXSSからの保護は優れていますが、入力がオペレーティングシステムのシェル呼び出しで使用される場合は、効果がありません。

データが使用されるときは常にエンコードまたはサニタイズします-これをできるだけ遅くします。たとえば、HTMLに出力する場合、この時点でHTMLエンコードします。

したがって、アプリケーションのすべての出力ポイントまたはシンクを把握していなければ、何か不足していると言うことはできません。データベースにデータを挿入し、それをHTML(not JSON、JavaScript、CSSなど)に出力するだけの場合は、適切な場所で正しいパラメーター化とHTML出力エンコーディングを実行すると、 XSSとSQLiの脆弱性に関しては問題ありません。データを使用して何かを行うには、形式に応じて適切なエンコード、サニタイズ、または正しいAPIを使用する必要があります。

3
SilverlightFox