【发布时间】:2014-09-03 00:09:07
【问题描述】:
我在控制器中这样做
$sources = array('' => 'Select Source') + Sources::lists('name', 'id');
Source 是一个模型。
然后在视图中,我这样做:
{{Form::select('source_id', $sources, '', $sources)}}
<span>{{$errors->first('source_id')}}</span>
结果 HTML 为:
<select ="select="" source"="" dubizzle="Dubizzle" name="source_id">
<option value="" selected="selected">Select Source</option>
<option value="1">Dubizzle</option>
</select>
如您所见,第一个选项 Select Source 没有任何价值。因此,当我提交表单没有选择任何来源,并像这样验证输入:
$validation = Validator::make(Input::All(), XMLDocument::$rules);
if($validation->passes()){}else{
return Redirect::back()->withInput()->withErrors($validation);
}
我收到了source_id 是必需的错误消息。
效果很好。
我的问题
我使用 Google Chrome F12 开发工具检查 HTML,并为 Select Source 选项添加了一个值。然后我提交表单并且验证没有发现错误。那是因为source_id 有一个值。
黑客可以很容易地操纵 HTML,我的服务器和数据库将会崩溃,因为这个 source_id 是一个外键,并且所有东西都连接到它。
请问如何自救?
更新 1
验证source_id的规则是:
'source_id' => 'required|integer',
【问题讨论】:
-
那么您在验证中将哪些规则集应用于您的 source_id 属性
-
@MarkBaker 我刚刚更新了包括您的请求在内的问题。
-
你可以伪造每一个表单元素,你的工作就是清理和验证输入。
标签: php laravel laravel-4 blade