FAQ履歴から
ドキュメントにWebセキュリティに関する内容を記載しようとしています。
(1) SQLインジェクション
Open棟梁でサポート済の次の内容について、
どのような方式なのかわかる記述や図はありますでしょうか?
また、自動生成D層の外部SQLファイルは静的パラメタライズドクエリのため、
プロジェクトでSQLインジェクション対策する処理の実装は不要、という理解であっていますでしょうか?
→ オンラインとバッチで異なります。
・オンラインは、基本的にパラメタライズド・クエリで防止。
パラメタライズド・クエリを使用しているケースはPJでのSQLインジェクション対策は不要と思います。
・バッチでSQLUtilityを使用する場合、パラメタ展開するので、
SQLUtilityの中でsingle quoteのサニタイジングだけしています。
ユーザ入力を持ってくる場合は、必要に応じて、インジェクション対策が必要になります。
対策=single quoteのサニタイジングだけで問題ないかどうか?をPJ側で確認下さい(SQL Serverなら大丈夫という認識です)。
なお、MySQL と PostgreSQLなど、環境によっては、「バックスラッシュのエスケープ」が必要に
なるケースがあるようですが、昨今、既定値では「バックスラッシュのエスケープ」不要となっているようです。
(2)HTMLのサニタイジング
Open棟梁でサポート済の次の内容について、
どのような方式なのかわかる記述や図はありますでしょうか?
また、HTMLサニタイジング対策は、
ASP.NETで対応しているため、
プロジェクトでサニタイジング対策する処理の実装は不要、という理解であっていますでしょうか?
※ 上記2点は、フレームワークの機能で対応済のため業務処理で何か実装する必要はない認識です。
→ これは、WebFormはWebControl、MVCのHTMLヘルパで対応します。
適切なWebControlや、HTMLヘルパを使用すれば、PJでのXSS対策不要です。
また、ValidateInput属性というものもありますのでコチラの利用もご検討下さい。
---
・SQLインジェクション対策の極意は
SQL文を組み立てないことにあり (1/4):CodeZine(コードジン)
・安全なウェブサイトの作り方:IPA 独立行政法人 情報処理推進機構
・別冊:「安全なSQLの呼び出し方」 > 付録A. 技術情報 > A.1. バックスラッシュのエスケープ
・SQLインジェクション対策の実装方針 - マイクロソフト系技術情報 Wiki
・XSS対策の実装方針 - マイクロソフト系技術情報 Wiki