php laravel选择可能是黑客的一个bug

时间:2014-07-12 13:31:44

标签: php laravel laravel-4 blade

我在控制器中执行此操作

$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',

2 个答案:

答案 0 :(得分:1)

而不是:

$sources = array('' => 'Select Source') + Sources::lists('name', 'id');

您可以使用:

$sources = array('Select Source') + Sources::lists('name', 'id');

所以第一项将是:

<option value="0">Select Source</option>

然后在您的规则中添加not_in:0,例如:

'source_id' => 'required|integer|not_in:0'

它会起作用,因为您的数据库中没有元素/记录的id为0。我总是这样做。

答案 1 :(得分:0)

您需要验证所选来源是否为有效来源。您可以使用exists规则,或者如果不是,则只需创建自定义规则。我会说exists规则应符合该法案。