2016-11-16 3 views
-3

DNN PortalSecurity.csにこのコードが見つかりました。これは、入力文字列のSQLインジェクションを安全にするためのものです。私は、このコードがユーザ入力をきれいにして、パラメータ化されていないクエリ、つまりSQLインジェクションを防ぐことができるかどうかを知りたいですか?ここに何か問題はありますか?このコードはSQLインジェクションを不可能にすることができますか?

private string FormatRemoveSQL(string strSQL) 
{ 
    const string BadStatementExpression = ";|--|create|drop|select|insert|delete|update|union|sp_|xp_|exec|/\\*.*\\*/|declare|waitfor|%|&"; 
    return Regex.Replace(strSQL, BadStatementExpression, " ", RegexOptions.IgnoreCase | RegexOptions.Compiled).Replace("'", "''"); 
} 
+12

なぜパラメータ化されていないクエリですか? – adt

+1

なぜ「選択」は「悪い声明」ですか? '%'と同じですか?それはあまりにも多くの "一般的な" redacterされredactingようだ。 –

+0

@mybirthname最初の文を読んでください。 [DotNetNuke/PortalSecurity.cs](https://searchcode.com/codesearch/view/3358680/)からヤンクされた –

答えて

2

一般的なキーワードを削除するだけです。これをのように安全にするためには、管理者の観点からベンダーによって宗教的に管理されなければならないので、それは悪夢です。

また、このリストには、潜在的に危険なキーワードがすべて含まれていることが非常に疑わしいです。また、特定の文字列を入力する能力が制限されている場合もあります(ただし、これが望ましい場合もあります)。しかし、それはカジュアルなハッカーを望んでいるかもしれません。

私はこれを、入力文字列をやや安全にする素人の方法と呼んでいます。

+0

実際、入力フィルタは一般的な場合にSQLiを防ぐことができません。それは不十分な保護であり、攻撃者がそれを回避する可能性が最も高いです。それはデータベース固有でもあり、正確な攻撃は使用されるDBMSに依存します。 –

関連する問題