Javascript “如何”;“安全”;是ASP.NET控制器
我对ASP.NET的MVC和AJAX的概念和设计还很陌生,我想知道当部署Web时,控制器对不需要的用户有多安全 我这样问是因为为了好玩,我制作了一个需要用户名和密码的小管理面板。输入信息后,AJAX会将信息提交给控制器中的ActionResult方法,该方法只会比较字符串是否匹配,然后将响应返回给AJAX 我的问题是,有人进入我的控制器并看到硬编码密码有多容易 没有专业类型的人会试图闯入这个网站,因为这是一个大学俱乐部的免费网站,但我想确保,如果计算机科学专业的学生碰巧“愤怒”或对某事发火,他们不会“闯入”(你永远不知道!哈哈) 问题:在ASP.NET MVC web部署的应用程序上,控制器内是否有“适当”安全的密码验证?为什么 这里是实际的代码,以防它的使用对答案有影响(出于隐私考虑,省略了域) 注意:我知道Javascript的使用可能不好,但我正在寻找一个关于AJAX和密码检查控制器安全性的答案 查看(管理/) 控制器(操作结果片段)Javascript “如何”;“安全”;是ASP.NET控制器,javascript,ajax,asp.net-mvc,security,webdeploy,Javascript,Ajax,Asp.net Mvc,Security,Webdeploy,我对ASP.NET的MVC和AJAX的概念和设计还很陌生,我想知道当部署Web时,控制器对不需要的用户有多安全 我这样问是因为为了好玩,我制作了一个需要用户名和密码的小管理面板。输入信息后,AJAX会将信息提交给控制器中的ActionResult方法,该方法只会比较字符串是否匹配,然后将响应返回给AJAX 我的问题是,有人进入我的控制器并看到硬编码密码有多容易 没有专业类型的人会试图闯入这个网站,因为这是一个大学俱乐部的免费网站,但我想确保,如果计算机科学专业的学生碰巧“愤怒”或对某事发火,他们
我对MVC和AJAX还是新手,更不用说任何涉及安全性的东西了,所以我只是想知道控制器有多安全,特别是在webdeploy上,对于这个简单的密码设置。在正常操作期间,没有任何问题,因为您的代码被编译,DLL被阻止提供,浏览器也无法请求控制器泄露自己的代码 但是,不可能(但非常罕见)服务器的不可预见的错误、漏洞或错误配置会导致服务器泄露编译代码、web.config等,从而有人可以反编译代码(IL很容易反编译)并泄露您的秘密 更令人担忧的是,有人可以物理访问服务器,直接获取二进制文件并进行反汇编以找到您的秘密 另一个要考虑的是,在正常情况下,谁可能会看到这个秘密,以及他们是否应该知道。开发人员、测试人员或审查人员可能被允许编写或检查代码,但您可能不希望他们知道这个秘密 处理这一问题的一种方法是不以明文形式存储机密。而不是有效值,然后更新应用程序,以同样的方式散列用户的输入,并比较结果。这样,如果用户获得了您的源代码,他们就无法读取原始纯文本值,甚至无法将其复制/粘贴到您的UI中。您可以滚动自己的代码来进行散列、使用API或其他操作 最后,不要依赖客户端的安全强制执行。您可以在客户端检查安全性以使UI做出适当的反应,但所有服务器端请求都应该进行检查以确保用户的安全声明有效 关于如何管理身份、密码和做出安全声明,这个问题实际上超出了讨论范围。花点时间浏览一下关于这个主题的文章。此外,VisualStudioASP.NET项目模板还包括许多安全基础设施,这些基础设施已经为您提供了一个良好的开端
永远不要把事情留给偶然是一项重要的政策。了解ASP.NET和MVC的各种身份验证和授权功能是一项值得努力的工作。另外,有许多插件可以为您完成许多繁重的工作。在正常操作过程中,没有任何问题,因为您的代码被编译,DLL无法提供服务,并且浏览器无法请求控制器泄露其自己的代码 但是,不可能(但非常罕见)服务器的不可预见的错误、漏洞或错误配置会导致服务器泄露编译代码、web.config等,从而有人可以反编译代码(IL很容易反编译)并泄露您的秘密 更令人担忧的是,有人可以物理访问服务器,直接获取二进制文件并进行反汇编以找到您的秘密 另一个要考虑的是,在正常情况下,谁可能会看到这个秘密,以及他们是否应该知道。开发人员、测试人员或审查人员可能被允许编写或检查代码,但您可能不希望他们知道这个秘密 处理这一问题的一种方法是不以明文形式存储机密。而不是有效值,然后更新应用程序,以同样的方式散列用户的输入,并比较结果。这样,如果用户获得了您的源代码,他们就无法读取原始纯文本值,甚至无法将其复制/粘贴到您的UI中。您可以滚动自己的代码来进行散列、使用API或其他操作 最后,不要依赖客户端的安全强制执行。您可以在客户端检查安全性以使UI做出适当的反应,但所有服务器端请求都应该进行检查以确保用户的安全声明有效 关于如何管理身份、密码和做出安全声明,这个问题实际上超出了讨论范围。花点时间浏览一下关于这个主题的文章。此外,VisualStudioASP.NET项目模板还包括许多安全基础设施,这些基础设施已经为您提供了一个良好的开端
永远不要把事情留给偶然是一项重要的政策。了解ASP.NET和MVC的各种身份验证和授权功能是一项值得努力的工作。另外,有很多插件可以为您完成很多繁重的工作。看起来您正在通过AJAX POST发送密码。对你的问题,,
//runs preloadFunc immediately
window.onpaint = preloadFunc();
function preloadFunc() {
var prompting = prompt("Please enter the password", "****");
if (prompting != null) {
$.ajax({
url: "/Admin/magicCheck",
type: "POST",
data: "magic=" + prompting,
success: function (resp) {
if (resp.Success) {
//continue loading page
}
else {
//wrong password, re-ask
preloadFunc();
}
},
error: function () {
//re-ask
preloadFunc();
}
});
}
else {
// Hitting cancel
window.stop();
window.location.replace("google.com");
}
}
[HttpPost]
public ActionResult magicCheck(string magic)
{
bool success = false;
if (magic == "pass")
{
success = true;
}
else
{
success = false;
}
return Json(new { Success = success });
}
if (resp.Success) {
//continue loading page
//this code can be executed by hand, from console
}
FormsAuthentication.SetAuthCookie("admin")