3

古いClassicASP環境では、OWASPを使用して、リクエストオブジェクトからパスワードを取得し、英数字以外の文字を暗号化します。これは、SQLインジェクションを防ぐための最初の防衛線です。完全なSQLインジェクション防止のために他の方法を使用します。

問題は、HTTP POSTメッセージをまとめるためにデータを収集し、ユーザー入力からパスワードを取得し、OWASPして送信する場合です。したがって、パスワードは正しくありません。

例:パスワードfreddie $ cougarはfreddie&36;cougarになります

最終的には、50文字のテキストフィールドではSQLインジェクションを実行するのに十分なスペースがないと想定し、コードを変更したため、パスワードをOWASPで入力しませんでした。これは少し怖い感じです。

彼らはより良い方法ですか?

コードはvbScriptで記述されています。

4

4 に答える 4

4

より良い解決策は、すべてのクエリをパラメータ化されたクエリに変換することです。

これがその方法を説明する12年前の記事です:)

于 2010-09-03T17:10:32.043 に答える
3

なぜパスワードをクリアテキストで送信するのですか?パスワードのハッシュ値を計算し、それを送信します。これにより、SQLインジェクションを防ぎ、man-in-the-middleタイプの攻撃を回避できます。

いずれの場合も、サーバーに到着したときにデータをクリーンアップする必要があります。vbscriptがクライアント側の検証を行う場合でも、スクリプトをバイパスし、悪意のある入力を含むパケットを手作りすることで、サービスを攻撃するのは簡単です。

于 2010-09-03T17:13:38.003 に答える
2

SQLステートメントをストアドプロシージャに移動することを検討し、それらのストアドプロシージャ内で動的SQLを使用しないようにしてください。

Dim userPwd = Trim(Request.QueryString("userPwd"))
'--- Create and append parameter for Password
Set pwdParameter = cmd.CreateParameter("@UserPassword", ad_nVarChar, adParamInput, 50, userPwd)
cmd.Parameters.Append pwdParameter

余談ですが、データベースにpwdを保存するのではなく、ソルトハッシュを保存するのが間違いなく最善です。

上記の方法は、データベースに送信する文字列に関係なく、アドホックステートメントとして直接実行されることを回避し、動的SQLでパラメーターを使用しない限り、SQLインジェクションを回避するために推奨されます。ストアドプロシージャ。

于 2010-09-03T17:11:59.343 に答える
1

多くのサイトでは、パスワードに使用できる文字のセットが制限されています。悲しみを引き起こさないセットを選択してください。これはおそらく英数字と句読点(コンマ、ピリオド、ダッシュ)を意味します。それを示唆したので、それらのサイトは私を苛立たせます-私はそうする機会が与えられたときにパスワードに豊富な文字セットを使用し、英数字のみのサイトでは通常、パスワードとして「IHateNoPunctSites」のようなナンセンスを使用することになります。

パスワードを16進数でエンコードされた文字列、またはbase-64でエンコードされた文字列として送信するのはどうですか?次に、パスワードで使用される文字セットを制限せずにインジェクションを防ぐために必要なだけ注意しながら、最後に文字列をデコードできます。パスワードをチェックする必要がある場合は、パラメーター化されたクエリを使用して、パスワードをクリーンに実行していることを確認できます。または、クエリをパスワードファイルに送信する前に、パスワードをソルトでハッシュすることもできます。とにかく、パスワードをあまり使わないでください。

于 2010-09-03T17:18:47.220 に答える