Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 只读文本框的服务器验证-prevevt输入值_C#_Javascript_Asp.net Mvc_Security_Disabled Control - Fatal编程技术网

C# 只读文本框的服务器验证-prevevt输入值

C# 只读文本框的服务器验证-prevevt输入值,c#,javascript,asp.net-mvc,security,disabled-control,C#,Javascript,Asp.net Mvc,Security,Disabled Control,我在mvc应用程序中有一个文本框,它被标记为只读(使用JavaScript)。然而,若用户知道JavaScript,他可以点击F12并执行$(“#AmountBox”).prop('readonly',false)并在文本框中输入一些值,单击Submit按钮并更改数据库中金额的值。如何防止用户在只读或禁用的文本框中输入值?有没有办法进行一些服务器验证?您可以通过向接受帖子的控制器操作添加黑名单(或白名单)来防止过度伪装 [HttpPost] public ActionResult Edit([B

我在mvc应用程序中有一个文本框,它被标记为只读(使用JavaScript)。然而,若用户知道JavaScript,他可以点击F12并执行
$(“#AmountBox”).prop('readonly',false)
并在文本框中输入一些值,单击Submit按钮并更改数据库中金额的值。如何防止用户在只读或禁用的文本框中输入值?有没有办法进行一些服务器验证?

您可以通过向接受帖子的控制器操作添加黑名单(或白名单)来防止过度伪装

[HttpPost]
public ActionResult Edit([Bind(Exclude = "AmountBox")] SomeClass model)
{
    //
}

如果您确实需要该只读值,但不想更改它,我认为您必须:

A) 将表单数据发送到浏览器之前在服务器上保存该值,并在发布时进行比较(有几种方法)


B) 如果可以,请仅在发布时获取适当的值,并且您根本不需要将其发送给客户端。

根据您在注释中的描述,您只希望将此金额数据从客户端发送到服务器(如果之前为零)。否则,仅显示金额。因此,要检查来自客户机的已处理数据,服务器需要检查数据库中是否没有金额值,并拒绝或忽略在这种情况下发送的任何金额数据。大概是

public void onDataReceived(Data data)
{
    if(db.GetAmountOfUserFromDB(data.userID) != null && data.AmountBox != null)
    {
       //just ignore the data.AmountBox value here or react with a message like "It is not allowed to change the amount"
    }
    else
    {
        //add data.AmountBox to db or whatever
    }
}

客户端发送到服务器的所有内容都可以由客户端进行操作。甚至不必是JavaScript。因此,您必须在服务器上对客户机数据进行服务器验证,以防止出现这种情况。但不知道你的背景,很难告诉你在这种情况下该怎么做我同意我有一个奇怪的情况,我必须向用户显示金额。如果为零,用户可以在其中输入值并提交,但如果数据库中已有值,则必须显示该值,但不可编辑。该值保存在数据库中,如果“金额”(属性)为零(无值),则文本框可编辑,用户可以在其中输入值,但如果用户已为“金额”指定了值,他没有可能编辑它,但他必须看到它。哦,好吧,那么在这种情况下,将它从绑定中排除是行不通的。下面是我要做的:在post中,我会在保存之前重新读取DB中的值,如果该值不为零,则忽略发布的值(或者在更新之前用获取的值覆盖客户端中的值),否则以“标准”方式更新。我认为这应该确保篡改数据被忽略。事实上,当这种情况发生时,您甚至可以捕捉到它并记录“黑客”尝试。