只读文本框的服务器验证 - 预先输入值

时间:2014-08-06 13:07:04

标签: c# javascript asp.net-mvc security disabled-control

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

如果您确实需要这个只读值,但又不想让它发生变化,我认为您必须:

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

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

答案 2 :(得分:1)

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

这样的东西
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
    }
}