/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the controller to call when that URI is requested.
|
*/
Route::get('/', function () {
abort(402, 'Unauthorized action.');//自定义网页错误
});//get方法路由器
/*Route::match(['get', 'post'], '/', ['as'=>'nihao',function(){
}]);//Route:;match与Route::any一样*/
//Route::get("/{name}",function($name){
// return $name;
//});
/*Route::get("/{name}",['as'=>'a','uses'=>'nihaoController@Nihao']);//路由方法与命名路由*/
//Route::get("/{num}",function($num){
//return $num;
//})->where("num","[0-9]+");一个正则用到的
//Route::get("/{num}/{username}",function($num,$username){
// dump($num,$username);
//})->where(array('num'=>"[0-9]+","username"=>'[a-z]+'));多个正则限定参数,用数组表示
/*$url = route('profile',['id'==1]);
命名路由与跳转 数组转餐
$redirect = redirect()->route('profile');*/
/*Route::group(['namespace'=>'nihao'],function(){
// Route::get("/{name}",['as'=>'a','uses'=>'nihaoController@Nihao']);//路由方法与命名路由
// 控制器在 "App\Http\Controllers\Admin" 命名空间下
});*/
/*Route::group(['prefix'=>'default'],function(){
Route::get('/', function () {
return view('welcome');
// 匹配 "/default/" URL
});
});*/
/*Laravel自动为每一个被应用管理的有效用户Session生成一个CSRF“令牌”,该令牌用于验证授权用户和发起请求者是否是同一个人。想要生成包含CSRF令牌的隐藏输入字段,可以使用帮助函数csrf_field来实现:
<?php echo csrf_field(); */?><!--
帮助函数csrf_field生成如下HTML:
<input type="hidden" name="_token" value="<?php /*echo csrf_token(); */?>">
当然还可以使用Blade模板引擎提供的方式:
{!! csrf_field() !!}
-->
5.2 从CSRF保护中排除URIs
有时候我们想要从CSRF保护中排除一些URIs,比如,如果你在使用你可以通过在VerifyCsrfToken
中间件中将要排除的URIs添加到$except
属性:
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
class VerifyCsrfToken extends BaseVerifier
{
/**
*从CSRF验证中排除的URL
*
* @var array
*/
protected $except = [
'stripe/*',
];}
5.3 X-CSRF-Token
除了将CSRF令牌作为一个POST参数进行检查,Laravel的VerifyCsrfToken
中间件还会检查X-CSRF-TOKEN
请求头,你可以将令牌保存在”meta”标签中:
<meta name="csrf-token" content="{{ csrf_token() }}">
创建完这个meta标签后,就可以在js库如jQuery中添加该令牌到所有请求头,这为基于AJAX的应用提供了简单、方便的方式来避免CSRF攻击:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
5.4 X-XSRF-Token
Laravel还将CSRF令牌保存到了名为XSRF-TOKEN
的cookie中,你可以使用该cookie值来设置X-XSRF-TOKEN
请求头。一些JavaScript框架,比如Angular,将会为你自动进行设置,基本上你不太会手动设置这个值。
6、表单方法伪造
HTML表单不支持PUT
、PATCH
或者DELETE
动作,因此,当定义被HTML表单调用的PUT
、PATCH
或DELETE
路由时,需要添加一个隐藏的_method
字段到给表单中,其值被用作HTTP请求方法名:
<form action="/foo/bar" method="POST">
<input type="hidden" name="_method" value="PUT">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>
7、抛出有两者方法手动从路由触发404错误。
第一种,使用帮助函数abort
,abort
函数会抛出一个指定状态码的Symfony\Component\HttpFoundation\Exception\HttpException
:
abort(404);
第二种,手动抛出Symfony\Component\HttpKernel\Exception\NotFoundHttpException
.的实例。