2

SQL インジェクション攻撃を防ぎたい。ユーザーの AD ユーザー名とパスワードを要求するフォームがあります。次に、処理コードは次のようになります。

<cfldap name="ldap_result" action="query" server="999.999.999.999" 
attributes="userprincipalname,title,samaccountname,sn,name,mail,cn" 
filter="(&(objectclass=user)(sAMAccountName=#form.username#))"
start="dc=us,dc=company,dc=lan"
scope="subtree"
username="US\#form.username#" 
password="#form.password#">

cfqueryparam (ユーザー名とパスワードの入力をラップするため) なしでユーザー入力を使用してクエリを実行することはありませんが、そのようなものは cfldap でも利用できますか? (それが違いを生む場合、私たちはCF10を使用しています。)

アップデート:

明確にするために、これを試したところ、次のエラーが発生しました。

タグ CFLDAP の属性検証エラーです。属性 CFSQLTYPE、VALUE は許可されません。

4

1 に答える 1

5

cfqueryparamいいえ、タグ内でタグを使用することはできませんcfldap。は、cfqueryparam特に SQL クエリに使用されます。しかし、あなたは正しく考えています。ユーザー入力を信用しない

cfldapタグは、それ自体である程度の保護を提供します。

LDAP インジェクション

ColdFusion は、<cfldap>タグを使用して LDAP サーバーと通信します。このタグには、LDAP に対して実行されるクエリを指示する ACTION 属性があります。この属性の有効な値は、add、delete、query (デフォルト)、modify、および modifyDN です。すべての<cfldap>呼び出しは、JNDI (Java Naming And Directory Interface) ルックアップに変換されます。ただし、<cfldap>は呼び出しをラップするため、ネイティブ JNDI コードがその属性に渡されると構文エラーがスローされ、LDAP インジェクションがより困難になります。

まだ読んでいない場合は、 ColdFusion 8 開発者セキュリティ ガイドラインの 14 ページを参照してください。これは ColdFusion 8 用に書かれたものですが、すべてではないにせよ、その多くは今でも関連しています。ColdFusion 11 用のドキュメントの更新版がありますが、実際にはバージョン 8 のドキュメントも参照として参照しています。

ここでは、ホワイトリスト アプローチを使用することをお勧めします。Active Directory には、ユーザー名とパスワードのフィールドに関する特定の要件があります。小文字と大文字、数字などのみ。これらの有効な文字のみのユーザー入力をチェックする正規表現を作成します。cfldapいずれかのフィールドにそれ以外のものが含まれている場合は、送信を拒否し、呼び出しを実行しないでください。

于 2015-03-23T19:06:35.443 に答える