阻止用户更改下拉列表中的“值”选项

时间:2011-10-11 03:13:33

标签: forms validation

这个问题可能听起来微不足道,但在这里......

我有一个提交表单,其中包含下拉菜单,如下所示:

<li><label for="stateprovince">State/Province:</label>
<select name="stateprovince" id="stateprovince">
<option selected="selected" value=""></option>
<option value="northland">Northland</option>
<option value="auckland">Auckland</option>
<option value="waikato">Waikato</option>
<option value="bayofplenty">Bay of Plenty</option>
<option value="eastcoast">East Coast</option>
<option value="hawkesbay">Hawkes Bay</option>
<option value="taranaki">Taranaki</option>
<option value="kingcountry">King Country</option>
<option value="wanganui">Wanganui</option>
<option value="manawatu">Manawatu</option>
<option value="wairarapa">Wairarapa</option>
<option value="wellington">Wellington</option>
<option value="nelsonbays">Nelson Bays</option>
<option value="marlborough">Marlborough</option>
<option value="buller">Buller</option>
<option value="westland">Westland</option>
<option value="northcanterbury">North Canterbury</option>
<option value="canterbury">Canterbury</option>
<option value="midcanterbury">Mid Canterbury</option>
<option value="southcanterbury">South Canterbury</option>
<option value="northotago">North Otago</option>
<option value="otago">Otago</option>
<option value="southland">Southland</option>
<option value="chathamisl">Chatham Islands</option>
</select><br></li>

这是我上周提交的作业/项目的一部分,我刚刚发现这个特别重要的我现在要描述......

我让用户从上面的下拉菜单中选择一个选项,一旦他们选择了一个项目并提交表单,所选的值就会被插入到数据库中。问题是用户可以在下拉菜单中修改标签中“值”字段的值。这个“坏”值被插入到数据库中,这不是我想要的。例如,用户可以通过检查元素和编辑源(或者用户告诉我)将值“otago”更改为“foobar”之类的内容。

将值放在php数组中并根据数组中的值检查所选的“值”,如果存在不匹配则触发错误消息是尝试解决问题的好方法吗?这是我第一次有人为我发现这个,并且为了将正确的数据插入到数据库中,我希望能够解决这个问题。

提前致谢!

1 个答案:

答案 0 :(得分:0)

您所关注的内容称为验证,表单验证或用户输入验证等。这对于安全性来说绝对必不可少。即使是非常大的网站/机构也因为没有正确地做到这一点而遇到严重问题他们仍然存在这些问题,尽管他们都应该更清楚。

您根据已知可能值列表检查值的想法很好。在选择测试“好”答案(“白名单”)与筛选不良值(“黑名单”)之间进行选择时,寻找好的价值更为可靠。很难想到可能提交的所有可能的坏的价值。

如果可能的好答案列表是有限且小的,检查数组是一个很好的解决方案,因为它使用精确值。当可能的值不是一个小的有限集时,当要求用户输入他们的名字时,它会变得更加棘手。在这些情况下,您经常需要使用正则表达式或其他形式的模式匹配来测试符合可能的良好答案(即只有字母和空格)的答案,并在将值插入到时将使用“参数化查询”。数据库,以便他们将被正确转义。这是我通过快速Google搜索找到的有趣链接:http://www.codinghorror.com/blog/2005/04/give-me-parameterized-sql-or-give-me-death.html