0

クライアントの検証のみに依存しないことについて多くのことが書かれています。これはユーザーにとって便利なだけであり、サーバーの処理を減らします。これは、この質問の内容ではありません。

これがASP.NETMVCに固有なのか、すべてのJQuery検証に固有なのかはわかりませんが、ここから質問が出てきます。clientsidevalidationを有効にしてReqularExpressionAttributeを使用すると、HTMLは、基本的な例をスローするために、data-val-regex-pattern = "^ [0-9a-zA-Z]{3,12}$"のように出力します。

これはかなり安全ではなく、式がチェックしているものとチェックしていないものを明示的に提供しますか?ユーザーがそれが何であるかを簡単に読み取ることができる場合、検証スキームの穴を悪用する方がはるかに簡単なようです。また、サーバーが使用する式と同じであるため、サーバーが何をチェックするかを確認することもできます。

アップデート

私の例の式は、問題を説明するのにあまり適していません。これは、非常に厳密な形式を持つより複雑なデータ値に関するものであり、意図せずにいくつかの抜け穴を見落とします

4

3 に答える 3

1

あなたが説明しているのは、あいまいさによるセキュリティです。つまり、攻撃者がそれを悪用する方法を知らなければ、何かが安全であるという考えです。

それはセキュリティではありません。脆弱性がある場合、安全ではありません。「あいまいさによるセキュリティはセキュリティではありません」ということわざがあります。

搾取されやすくなりますか?たぶん、しかし正直なところ..解決策はコードを修正することです。

これを別の言い方をすれば、攻撃者が誤って脆弱性に出くわす可能性もあります。あなたはまだ脆弱であり、依然として安全ではありません。

于 2012-04-14T21:18:12.347 に答える
0

検証する内容によっては、セキュリティホールになる可能性があります。ただし、ほとんどの場合、N層アプリケーションでは、フロントエンドモデルはバックエンドモデルとは異なります。また、バックエンドは引き続きそれを検証し、適切な例外をスローします。

目立たない検証に関するいくつかの情報:

jQueryの目立たない検証では、data-属性を利用します。

目立たない検証が必要ない場合は、web.configで無効にすることができます

web.configにアクセスして、これを見つけてみてください。

<appSettings>
   <add key="ClientValidationEnabled" value="true" />
   <add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>

そして、UnobtrusiveJavaScriptEnabledをfalseに設定します。ただし、さらに多くのキーがある可能性があります。

于 2012-04-14T20:49:45.663 に答える
0

この質問をしてから 1 年後、私は前の自分に言いたいことがあります。その答えは、検証の目的は入力されたデータの種類を検証することであり、要求を検証することではないと思います。したがって、これは心配する必要はありません。

于 2013-07-31T03:31:50.343 に答える