我已经读过
Securing AJAX Requests via GUID
和
Securing an ajax request
.现在让我解释一下我的场景,下面是可能有助于解释主题的代码片段。
[WebMethod[EnableSession = True]
[ScriptMethod]
public static string CreateTitle(string strTitleName)
{
string strResult = "Custom jSon string";
if(Session["Authorized"] == "True" && !String.IsNullOrEmpty(strTitleName))
{
String strTitle = Server.HtmlEncode(strTitleName);
InsertRecordInDB(strTitle);
strResult = "Custom jSOn string" + EncryptMD5("record id");
}
return strResult;
}
下面是发送参数的 javascript 调用。 btnCreateTitle_click 是按钮客户端的点击事件。 txtTitle 是接受标题名称的文本框。在页面上创建验证器以验证文本框。 CreateTitle 是我使用脚本管理器调用的页面方法
function btnCreateTitle_Click(evnt){
if(Page.ClientValidate()){
if($get("txtTitle")){
PageMethods.CreateTitle($get("txtTitle").value,success,failure,context);
}}}
函数成功显示标题已创建的咆哮消息,并显示带有加密记录 ID 的链接作为查询字符串到 url 以查看创建的标题的详细信息。
现在迫切的问题,
最佳答案
虽然将任何方法限制为经过身份验证和授权的用户是微不足道的,但是当您在查询字符串中公开 db id 时,您确实打开了经过身份验证和授权的用户可能试图访问他们没有的记录的可能性。当 db id 是整数或其他一些容易猜到的标识符时尤其如此。使用 Guids 作为 db ids 可以减轻这种风险,尽管不是绝对的。
你总是需要记住的是不要相信输入。通过默默无闻(即加密等)的安全性不是一种可靠的技术。您的服务应始终验证当前用户是否可以检索他们请求的记录。有时这称为行级安全性。这只能以编程方式完成。
例如,您不仅需要确定某人有权查看记录,还需要验证他们实际上是否有权访问他们请求的记录。
这意味着您需要某种方式将记录与经过身份验证的用户相关联。
顺便说一句:任何 HTTP 请求都被验证为潜在的危险输入。
希望这可以帮助,
关于asp.net - 通过经过身份验证的 Web 表单保护 ASP.net 中的 Ajax 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5449141/