【问题标题】:Generate a token from string and check it从字符串生成令牌并检查它
【发布时间】:2015-11-07 06:05:52
【问题描述】:

我有许多产品类型的表格。每种类型都由一个 select 选项加载。

类似这样的:

<select name="name">
  <option value="product_1"> product one </option>
  <option value="product_2"> product two </option>
</select>

每种产品类型都有不同的输入。 当select 更改被触发时,一个ajax 请求引用inputs

要在后端中进行数据验证,我必须使用option 值来了解提交的产品类型。

好吧,现在是漏洞

  1. 用户选择并填写一些产品类型
  2. 用户故意将option标签的当前值(在浏览器上)更改为另一个有效值
  3. 用户向服务器发送这些不一致的数据

显然,验证这一点并非不可能,但有点无聊。

为方便起见,我为每种产品类型添加了一个input[type=hidden],并带有一个“令牌”(哈希)作为value 属性。

其实“令牌”无非就是(变通方法)Hash::make( $selected_option_value )

See Hashing on Laravel website.

现在,提交产品后,只需检查Hash::check( $selected_option_value, $selected_option_value_hash),如果为真,我对产品类型“确定”

当然这个变量名不是真实的

但要做到这一点,bcrypt (Hash::make()) 似乎不是一个好主意。

所以,我有一些问题:

  1. 如何从字符串生成令牌并检查为password_hashpassword_verify

  2. 或者有其他更好的方法来解决这个问题?

【问题讨论】:

  • 您不能生成您拥有的产品列表并将所选值与该列表进行比较。如果不是这些类型之一,则抛出异常/错误消息?

标签: php jquery ajax laravel hash


【解决方案1】:

我个人会使用请求来验证这一点。

首先使用 artisan 命令

php artisan make:request MyRequest

然后在你的请求中使用它

<?php namespace App\Http\Requests;

use App\Http\Requests\Request;
class MyRequest extends Request {

    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return Auth::check();
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'name' => 'exists:products,name'
        ];
    }

}

确保在您的控制器中使用请求。我喜欢为此使用依赖注入

public function myFunction(MyRequest $request)
{
    /*Stuff */
}

确保在控制器的顶部声明它

use App\Http\Requests\MyRequest;

http://laravel.com/docs/5.1/validation#rule-exists

【讨论】:

    猜你喜欢
    • 2015-04-16
    • 2017-06-18
    • 2012-05-08
    • 2012-08-19
    • 1970-01-01
    • 2018-12-30
    • 2023-03-04
    • 2019-08-22
    • 1970-01-01
    相关资源
    最近更新 更多