是否可以使用Perl的服务器端验证来验证无线电组(以便检查或选择某些内容)?如果是这样,怎么样?
我已经将它用于JavaScript,但我希望即使不启用JavaScript也可以提交此表单。因此,我需要在服务器端进行验证。
无线电组没有固定的名称,它可以更改,但必须有名称,以便@names = $cgi->param()
将提供所有名称。
我正在考虑给我类型的东西,比如JavaScript中的类型,以确定它是否是组中的单选按钮。
答案 0 :(得分:4)
您的CGI脚本接收表单字段作为名称 - 值对,而没有任何关于生成值的可视表单元素类型的信息。
您的CGI脚本必须知道要验证其值的输入变量的名称。根据不受信任的用户输入提供给脚本的名称是有风险的恕我直言 - 包括使用另一个字段,其值是无线电组的名称。
说,你有一个名为contact_me
的变量,它可以采用值"yes"
和"no"
。如果使用
<select name="contact_me">
<option value="yes" selected="1">Please do!</option>
<option value="no">Oh no!!!</option>
</select>
或使用
<input type="radio" name="contact_me" value="yes" checked="1">
<input type="radio" name="contact_me" value="no">
或者如果用户在文本字段中输入了她的答案
<input name="contact_me">
您的CGI脚本唯一需要关注的是contact_me
的值是"yes"
还是"no"
。
看起来你没有牢牢掌握CGI。请参阅The World Wide Web Security FAQ: CGI (Server) Scripts作为起点。
在理解其后果之前,请停止所有的CGI开发。我根据您的意见撤消此评论,澄清使用配置文件定义参数名称(原则上,它的数量级更安全)。
答案 1 :(得分:1)
传递包含radiogroup名称的另一个隐藏输入字段,然后阅读
@values = $cgi->param($cgi->param("radiogroup_name")); // IIRC