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