用perl / cgi验证radiogroup

时间:2010-03-09 16:42:46

标签: perl cgi

是否可以使用Perl的服务器端验证来验证无线电组(以便检查或选择某些内容)?如果是这样,怎么样?

我已经将它用于JavaScript,但我希望即使不启用JavaScript也可以提交此表单。因此,我需要在服务器端进行验证。

无线电组没有固定的名称,它可以更改,但必须有名称,以便@names = $cgi->param()将提供所有名称。

我正在考虑给我类型的东西,比如JavaScript中的类型,以确定它是否是组中的单选按钮。

2 个答案:

答案 0 :(得分:4)

您的CGI脚本接收表单字段作为名称 - 值对,而没有任何关于生成值的可视表单元素类型的信息。

您的CGI脚本必须知道要验证其值的输入变量的名称。根据不受信任的用户输入提供给脚本的名称是有风险的恕我直言 - 包括使用另一个字段,其值是无线电组的名称。

说,你有一个名为contact_me的变量,它可以采用值"yes""no"。如果使用

提供值,您的CGI脚本绝对没有理由关心
<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