2016-01-21 45 views
0

我有這樣Laravel 5路線獲得參數SQL注入攻擊

Route::get('/car-{travelType}/{cityFrom}-{cityTo}-{id}.html','[email protected]')->name('articles_detail'); 

而且在我的控制器的路線,我趕上這樣

public function getDetail($cityFrom, $cityTo, $id, Request $request) 
{ 
    $article_detail = DB::select("CALL article_detail(?,?,?)", [$cityFrom,$cityTo,$id]); 
    return $article_detail; 
} 

這將參數工作正常,但有一個問題,這查詢獲取sqlinjection,因爲路由發送原始參數。

在post request中,我可以捕獲像$request->input('some_fields')這樣的請求,laravel保護我在屏幕後面,但沒有得到請求。

我該如何解決這個問題?

+1

當你使用'DB :: select'只要你傳遞用戶你已經對SQL注入保護提供的數據作爲第二個參數和在sql中使用'?'。 –

+0

@LoganBailey哦,這是真的。非常感謝,對不起,我沒有測試過的代碼之前詢問:( – vietnguyen09

+0

那些不是查詢字符串變量,他們是路由參數 – lagbox

回答

0

可以使用$請求 - >獲取( 'somefield')也是在這種情況下使用

www.site.com/page?somefield=value 

,當你把對Get請求$請求 - >獲取( 'somefield'),它應該給你「值」

所以你的情況:

www.site.com/page?travel-type=foo&city-from=berlin&city-to=munich&id=1 

$request->get('travel-type'); // foo 
$request->get('city-from'); // berlin 
$request->get('city-to');  // munich 
$request->get('id');   // 1 
+0

感謝您的幫助,但我的網址它不像你的那樣perfomance param,就像' site.com/some-thing/some-thing-1352.html'和'$ request-> get('id')'不起作用 – vietnguyen09