只读文本框的服务器验证-防止输入值

本文关键字:输入 验证 文本 服务器 只读 | 更新日期: 2023-09-27 18:16:35

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

只读文本框的服务器验证-防止输入值

您可以通过在接受POST的控制器操作中添加黑名单(或白名单)来防止重叠。

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

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

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

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

根据您在评论中的描述,您只希望此Amount-data在之前为零时从客户端发送到服务器。否则金额就直接显示出来了。因此,为了检查来自客户机的被操纵的数据,服务器需要检查数据库中是否没有数量值,并拒绝或忽略在这种情况下发送的任何数量数据。比如

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
    }
}