0

私はasp.net mvc 4(vb)を使用していますが、この最後の部分で立ち往生して、検索機能を本当に完成させています。ValidateInput(False) パラメータは、javascript による呼び出しを使用している場合を除き、すべての呼び出しで機能します。表示されるエラーは次のとおりです。潜在的に危険な Request.Path 値がクライアント (<) から検出されました。html のようなものを検索しようとすると、これが表示されます。

使用しているコードをリストします。

MVC ビュー:

<input type="text" id="searchtextMVC" name="query" onkeydown="EnterKeyDownForWhoIsWho(event);" data-url="@Url.Content("~/Controller/")"/>

JavaScript:

window.location.href = $('#searchtextMVC').attr('data-url') + 'Index/' + document.getElementById('searchtextMVC').value;

これら2つはそれを修正するので、パラメーターを使用して正しいURLを取得します。

私の行動は次のように始まります:

<ValidateInput(False)> _
        Public Function Index() As ActionResult
             Code stuff, eventually using CStr(RouteData.Values("fullName"))

ここでの問題は、ValidateInput がすべての呼び出しで機能することです。ただし、javascript を介した呼び出しは除きます。requestValidationMode="2.0" も web.config に追加しましたが、役に立ちませんでした。関数が機能するには、パラメーター fullName を指定する必要があります。

インターネットで検索しても答えがないので、一緒に解決できることを願っています。

編集: web.config で requestPathInvalidCharacters="" も試したことを忘れていましたが、これにより、常に不正な文字エラーが発生するようになりました。

EDIT2:

JavaScript で URL エンコードを試みましたが、役に立ちませんでした。これが私が試したことです:

searchValue = $('#searchtextMVC').attr('data-url') + 'Index/' + encodeURIComponent(document.getElementById('searchtextMVC').value);
4

1 に答える 1

-1

問題:

ValidateInput を false に設定すると、Request.Form で「潜在的に危険なリクエスト」が許可されます。

ただし、URL を作成する方法では、入力値を取得し、それを URL の一部として追加しています。ValidateInput を false に設定しても、「潜在的に危険な Request.Path 値が検出されました」を防ぐことはできません。

考えられる解決策:

入力された値を URL エンコードし、クエリ文字列で渡すことを検討してください。

于 2013-02-08T18:39:14.037 に答える