【问题标题】:php laravel the select could be a bug for hackersphp laravel 选择可能是黑客的错误
【发布时间】: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


【解决方案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
  • 其实我也忙于一个Laravel 项目和我的一个Laravel book 所以不能经常来这里。祝你的新项目一切顺利:-)
  • @WereWolf-TheAlpha 哇,哇,你的新书一切顺利,我一定会买的。
【解决方案2】:

您需要验证所选来源是有效来源。您可能可以为此使用exists 规则,或者如果这是不行的,那么只需创建一个自定义规则。我想说exists 规则应该符合要求。

【讨论】:

  • 在某些情况下怎么办?您不仅需要检查“存在”,还需要检查它是否是有效的关系,或者外部 ID 属于 该用户。我一直有这个问题。我正在使用一个自定义规则集来查找关系是否存在,并对其进行验证...?
  • 我已经给了你我正在使用的规则,你能在我的规则中添加exists 验证吗?
  • 'source_id' =&gt; 'required|integer|exists',
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-07
  • 1970-01-01
  • 2017-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多