首页 > 解决方案 > 如何交叉检查html中的提示输入

问题描述

所以我正在为我的学校做一个项目。我会事先声明,因为我知道从项目的 stackoverflow 等外部帮助中获得不公平的优势绝对不是一件好事,但我真的需要这个帮助。

所以我正在使用 mvc 做一个 ASP.NET 核心 Web 应用程序,并且我正在尝试创建一个管理门户,它验证提示输入并重定向到管理页面。包括验证和重定向在内的所有其他操作都可以正常工作,但我面临着一个严重的安全问题。

我将首先在这里粘贴我的代码,简要介绍我到目前为止所做的事情

AdminPortal.cshtml:

@{
    ViewData["Title"] = "Admin Portal";
}

<body>
    <button onclick="Prompt()" class="btn btn-primary btn-block">Admin access</button>
    <script>
        function Prompt() {
            let Message = prompt("Admin access is strictly restricted for public users.\nPlease maintain a healthy enviroment in this website.\nPlease input the admin password to continue!")
            if (Message != "ZdIoN1Fo0)(12AsjH") {
                window.location.href = "/"
            } else {
                window.open("AdminPage");
            }
        }
    </script>
</body>

AdminPage.cshtml:

@{
    ViewData["Title"] = "Admin Page";
    string[] TableHeaders = new string[]
    {
      "First name"
      ,"Last name"
      ,"Email"
      ,"Phone Number"
    };
    Layout = "/Views/Shared/_Layout.cshtml";
}

<style>
    body{
        display:flex;
        background:#222831;
        align-items:center;
        justify-content:center;
        height:100vh;
        color:snow;
    }
    .table{
        background:#fff;
        max-height:470px;
        overflow-y:auto;
        box-shadow:0px 10px 50px 0px rgba(0,0,0,0.5);
        border-radius:10px;
    }
    table{
        width:100%;
        text-align:center;
        border-collapse:collapse;
    }
    table thead th,
    table tbody td{
        padding:15px;
        border:none;
        font-weight:600;
        font-size:14px;
    }
    table thead th{
        background: #1861ac;
        color:snow;
        font-size:16px;
        position:sticky;
        top:-1%;
    }
    table tbody td {
        border-bottom: 1px solid rgba(0,0,0,0.1);
    }
    nav{
        display:none !important;
    }
</style>

<div class="table">
    <table class="table table-bordered table-hover">
        <thead>
            <tr>
                @{
                    foreach (var head in TableHeaders)
                    {
                        <th>
                            @head
                        </th>
                    }
                }
            </tr>
        </thead>
        <tbody>
            @{
                if (Model != null)
                {
                    foreach (var Acc in Model)
                    {
                        <tr>
                            <td>@Acc.Fname</td>
                            <td>@Acc.Lname</td>
                            <td>@Acc.Email</td>
                            <td>@Acc.PhoneNO</td>
                        </tr>
                    }

                }
            }

        </tbody>
    </table>
</div>

好的,如您所见,管理员密码ZdIoN1Fo0)(12AsjH对任何在管理门户页面上检查元素的用户都是可见的,这打破了整个仅管理员访问的概念。我想知道如何将密钥隐藏在公众的视线之外,并且可能仍然可以验证。

另外,关于安全问题,我想加入另一个功能,它只允许用户通过管理门户页面进入管理页面。我该怎么做?我考虑过使用返回值进行验证,但不知道该怎么做。

来之前问了朋友,他们说我不应该在前端认证,而是在后端做;我不知道;我的 homecontroller.cs 是我的后端吗?不知道如何从那里进行验证。

我也做了一些研究,并认为也许https://stackoverflow.com/a/14774470/13734672可能会在某些方面派上用场,但仍然没有找到实现它的方法。

除了现有的问题,我想知道是否可以在重定向window.location.href = "/"中添加一个功能,比如另一个提示“未经授权的尝试!”,当重定向到 index.cshtml 时是否可能?

任何帮助将不胜感激 :)

标签: htmlasp.net-core-mvcpassword-hash

解决方案


是的,您的朋友是对的,我们不应该从客户端对用户进行身份验证,因为一切都是在客户端以某种方式完成的,或者任何最终用户都可以轻松找到任何其他方式。ASP.NET 提供了两个特性来实现这一点。一种关于“你是谁?作为本网站的有效用户”的身份验证。二、授权“你有什么权利在现场执行任何操作?”

在此处输入图像描述 在此处输入图像描述

参考:ASP-NET 身份验证和授权

由于它是学术项目,我将为您提供具有示例实现的链接 https://www.codeproject.com/Articles/98950/ASP-NET-authentication-and-authorization-2

并回答您关于重定向的最后一部分。一旦您实现了身份验证和授权并配置了哪些用户/角色访问了哪些页面,它将重定向到登录页面。如果您希望自定义页面重定向,例如 accessdenide 等。您可以使用 web.config 来实现


推荐阅读