Laravel 5.3中的Ajax可供所有人访问

时间:2016-10-11 10:40:02

标签: json ajax laravel

我是Laravel的新手,很抱歉我的代码......

我正在尝试将jquery库与我的Laravel项目集成。

控制器

public function index()
{

    return view('products');

}

public function data()
{
    $products = Product::all();

    return $products->toJson();

}

路线

Route::get('/products', ['as' => 'products', 'uses' => 'ProductController@index']);
Route::get('/products/data', ['as' => 'products.data', 'uses' => 'ProductController@data']);

查看

<script>

    var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content');

    $.ajax({
        url: '/products/data/',
        type: 'GET',
        data: {_token: CSRF_TOKEN},
        dataType: 'JSON',
        success: function (data) {
            console.log(data);
        }
    });

</script>

一切正常,但如果我去/ products / data /我可以在浏览器上看到json。这不应该发生!

我做得对吗?这是从数据库中获取json数据到视图的正确方法吗?

谢谢。

2 个答案:

答案 0 :(得分:2)

只要此信息对攻击者无用,您就无需担心。如果您想对网站造成一些伤害,那么产品信息很可能不是您想要的。

确保有关用户的信息不会通过GET Request进行转移。因为这样,想要对您的网站造成伤害的人可以访问他们想要实现的信息。确保此数据通过POST Request传输,以便他们无法轻松访问这些信息。另外,请确保散列的信息只能由用户自己或其他可靠来源提供。

在这种情况下,我一眼就看不到你的方法有什么问题。

有关此主题的更多信息,请访问:HTTP Methods: GET vs. POST

答案 1 :(得分:1)

您可以使用请求wantsJsonajax方法

<强>控制器

use Illuminate\Http\Request;

public function data(Request $request)
{
    $products = Product::all();

    if ($request->wantsJson()) {
        return $products;
    }

    return abort(404);
}