SQLインジェクションを避けるベストプラクティスは何ですか?私は自分のアプリケーションにMcAfeeの安全チェックを実行しているSQL ServerのブラインドSQLインジェクションの脆弱性を回避するためのベストプラクティス - ASP.Net
、 はそれが問題にSQL Serverの
でブラインドSQLインジェクションの脆弱性を示し、提案は
以下のようにこれを修正するにはSINGLE BEST WAYです各形式の許容可能な入力を確認するための脆弱性があります。 パラメータと基準を満たしていない入力を拒否します。 以下は適切な解決策ですが、最適ではありません。 URLパラメータを含むデータ入力フィールドでコンテンツ解析を実装します。 任意のユーザーまたはダイナミックデータベースの入力から次の文字を削除します。(VBScriptの例) '(一重引用符をエスケープする)input = replace(入力、 "'"、 "''") "(二重引用符)input = replace入力( "("、 ""))(半角かっこ) 入力=置換(入力、 ")"、 "" (パイプ)input = replace(入力、 "|"、 "") - 入力の置換(入力、 ";"、 "" )テキスト入力に ユーザ供給された入力の前後に引用符を追加することをお勧めします。
私が正しく提案を理解していれば、私は自分のアプリケーション内のすべてのフォームを見つけて、" ' () *
のような特殊文字を受け付けないためにそれを検証する必要があり
これ以上何かありますか?
どのように私は、SQLインジェクションのための私のアプリケーションが脆弱ではないことを確認することができます
編集
その他の仕様:
Protocol https Port 443 Read Timeout30000Method POST
Path /Login
Hea
ders
Referer=https%3A%2F%2Fwww.mydomain.org%2FLogin
Content-Type=application%2Fx-www-form-urlencoded
Body
ctl00_ScriptManager1_HiddenField=0
__EVENTTARGET=0
__EVENTARGUMENT=0
__VIEWSTATE=/wEPDwUJNjc2MTk0ODk1D2QWAmYPZBYCAgMPZBYCAgsPZBYCAgUPFgIeBFRleHQ
FNzxhIGhyZWY9Jy9SZWdpc3RyYXRpb24nIGNsYXNzPSdidXR0b24nPlJlZ2lzdGVyIE5vdzwvYT5kZEMqo
HfESjF9a2aAo6EwUZFLyVY43k2Ywc5HOrQBdZqz
__EVENTVALIDATION=/wEWCgLkzYaLDgKV/vKYDgKBuZWrDQKS/tSgCgLJloD/DALrw4jECgKb/IYvAu2
GxZoEAuemgo8LAoyWmLsKGesm2g0zKeoodCDHz6Mm9GhhkuncAqXhHTAcUjL1R1Y=
ctl00$header1$btnDisclaimerHTMLOK=OK
ctl00$header1$btnDisclaimerHTMLCancel=Cancel
ctl00$header1$btnSubmit=Register
ctl00$cc1$txtEmail=x' wAiTfOr dELay '0:0:20'--
ctl00$cc1$txtPassword=0
ctl00$cc1$cmdLogin=Log In
Protocol https Port 443 Read Timeout30000Method POST
Path /login/
Hea
ders
Referer=https%3A%2F%2Fwww.mydomain.org%2Flogin%2F
Content-Type=application%2Fx-www-form-urlencoded
Body
ctl00_ScriptManager1_HiddenField=0
__EVENTTARGET=0
__EVENTARGUMENT=0
__VIEWSTATE=/wEPDwUJNjc2MTk0ODk1D2QWAmYPZBYCAgMPZBYCAgsPZBYCAgUPFgIeBFRleHQ
FNzxhIGhyZWY9Jy9SZWdpc3RyYXRpb24nIGNsYXNzPSdidXR0b24nPlJlZ2lzdGVyIE5vdzwvYT5kZEMqo
HfESjF9a2aAo6EwUZFLyVY43k2Ywc5HOrQBdZqz
__EVENTVALIDATION=/wEWCgLkzYaLDgKV/vKYDgKBuZWrDQKS/tSgCgLJloD/DALrw4jECgKb/IYvAu2
GxZoEAuemgo8LAoyWmLsKGesm2g0zKeoodCDHz6Mm9GhhkuncAqXhHTAcUjL1R1Y=
ctl00$header1$btnDisclaimerHTMLOK=OK
ctl00$header1$btnDisclaimerHTMLCancel=Cancel
ctl00$header1$btnSubmit=Register
ctl00$cc1$txtEmail=x' wAiTfOr dELay '0:0:20'--
ctl00$cc1$txtPassword=0
ctl00$cc1$cmdLogin=Log In
私はマカフィーがここで見つける問題が何であるかを理解していません。 ユーザログインのために私はパラメータ化されたストアドプロシージャを使用しています。ユーザー入力はクライアント側で検証されます
マカフィーはかなり間抜けです。誰もが単一の最善の方法がパラメータを使用することを知っています(動的SQLでも、ユーザー入力用のパラメータを使用しています) – dotjoe