Javascript “如何”;“安全”;是ASP.NET控制器

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 我的问题是,有人进入我的控制器并看到硬编码密码有多容易 没有专业类型的人会试图闯入这个网站,因为这是一个大学俱乐部的免费网站,但我想确保,如果计算机科学专业的学生碰巧“愤怒”或对某事发火,他们

我对ASP.NET的MVC和AJAX的概念和设计还很陌生,我想知道当部署Web时,控制器对不需要的用户有多安全

我这样问是因为为了好玩,我制作了一个需要用户名和密码的小管理面板。输入信息后,AJAX会将信息提交给控制器中的ActionResult方法,该方法只会比较字符串是否匹配,然后将响应返回给AJAX

我的问题是,有人进入我的控制器并看到硬编码密码有多容易

没有专业类型的人会试图闯入这个网站,因为这是一个大学俱乐部的免费网站,但我想确保,如果计算机科学专业的学生碰巧“愤怒”或对某事发火,他们不会“闯入”(你永远不知道!哈哈)

问题:在ASP.NET MVC web部署的应用程序上,控制器内是否有“适当”安全的密码验证?为什么

这里是实际的代码,以防它的使用对答案有影响(出于隐私考虑,省略了域)

注意:我知道Javascript的使用可能不好,但我正在寻找一个关于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")