我已经读过通过 GUID 保护 AJAX 请求 https://stackoverflow.com/questions/652851/securing-ajax-requests-via-guid
and
保护 ajax 请求 https://stackoverflow.com/questions/2692797/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 是我使用 scriptmanager 调用的页面方法
function btnCreateTitle_Click(evnt){
if(Page.ClientValidate()){
if($get("txtTitle")){
PageMethods.CreateTitle($get("txtTitle").value,success,failure,context);
}}}
函数 success 会显示一条咆哮消息,表明标题已创建,并显示一个链接,其中包含加密记录 ID 作为 url 的查询字符串,以查看已创建标题的详细信息。
现在最紧迫的问题是
- 这足够安全吗?我缺少什么?
- 我怎样才能使这个过程更安全、更快?
虽然将任何方法限制为经过身份验证和授权的用户是微不足道的,但当您在查询字符串中公开数据库 ID 时,您确实打开了经过身份验证和授权的用户可能寻求访问他们不应该访问的记录的可能性。当数据库 ID 是整数或其他一些容易猜到的标识符时尤其如此。使用 Guid 作为数据库 ID 可能会降低这种风险,但并非绝对如此。
您始终需要记住的是不要相信输入。通过模糊性(即加密等)实现安全并不是一种可靠的技术。您的服务应始终验证当前用户是否有权检索他们请求的记录。有时这称为行级安全性。这只能通过编程来完成。
例如,您不仅需要确定某人有权查看记录,还需要验证他们实际上是否有权访问他们所请求的记录。
这意味着您需要某种方式将记录与经过身份验证的用户相关联。
顺便说一句:任何 HTTP 请求都会经过验证是否存在潜在危险的输入。
希望这可以帮助,
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)