-1

jqueryloadコマンドを介してコンテンツをdivにロードするJavaScriptを含むMVC3Webページがあります。こんな感じ…

 $('#divContetn').load('/home/getContent')

これは、他のJavaScriptが実行された後のコールバックで呼び出されます。このコードはページソースに表示されます。

私の質問はこれです、このURLへの呼び出しがWebページからのみ行われ、ブラウザ自体にURLを入力する人からではないことを確認する方法はありますか?

理想的には、ユーザーがページソースからこのURLを取得し、それを使用してコンテンツだけをブラウザー自体にロードするのを止めたいと思います。

divの読み込みは、後で読み込まれるコールバックの性質上、JavaScriptから実行する必要があります。

誰かがこれについて何かアイデアがありますか?ありがとうございました

4

2 に答える 2

1

ユーザーから URL を隠すことはできません。せいぜい、ユーザーが URL を取得するために費やす労力を増やすことができます。ソースから URL を隠すことができたとしても (JavaScript でエスケープするか、AJAX 経由で URL を取得することによって)、ユーザーは Fiddler のようなツールを使用するだけで URL が何であるかを知ることができます。または、利用可能な場合は、ブラウザに組み込まれているデバッグ ツール。

アクション メソッドの上にこの属性を配置することで、ユーザーが AJAX 呼び出しを行う場合にのみ URL がナビゲート可能であることをサーバー側で保証することができます。

public class AjaxOnlyRequestAttribute : ActionMethodSelectorAttribute
{
    /// <summary>
    /// Determines whether the action method selection is valid for the specified controller context.
    /// </summary>
    /// <param name="controllerContext">The controller context.</param>
    /// <param name="methodInfo">Information about the action method.</param>
    /// <returns>
    /// true if the action method selection is valid for the specified controller context; otherwise, false.
    /// </returns>
    public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
    {
        return controllerContext.HttpContext.Request.IsAjaxRequest();
    }
}

しかし、繰り返しますが、それはユーザーが費やさなければならない労力を増やしています。

于 2013-02-12T11:00:42.503 に答える
0

リクエストがajax 呼び出しで行われた可能性があるかどうかをテストするRequest.IsAjaxRequest()ことで確認できます(こちらを参照)。

これにより、「通常の」ユーザーがページに直接アクセスできなくなります。しかし、サーバーに ajax 要求であると信じ込ませるヘッダーを含む HTTP 要求を偽造するのは簡単です。

原則として、クライアントのリクエストに含まれるものは何でも偽造および操作できると常に想定してください。クライアントから来るものは何も信用しないでください。特に、セキュリティ関連の機能をリクエスト値やブラウザの機能に基づいて作成しないでください (もちろん、ログイン資格情報などは除きます)。

于 2013-02-12T11:00:49.893 に答える