2014-01-25 7 views
5

Wie denkst du über Sicherheit in Laravel 4? Ich meine, wie Laravel XSS-Attacken verwaltet?Wie können Sie XSS-Filter in Laravel 4 Framework anwenden?

In coderigniter haben Sie etwas wie xss_clean ($ _ GET ['yourValue']) zu reinigen Benutzereingabe aus XSS-Code.

Wie Laravel verwalten diese Art von Problemen? Sie erhalten Benutzerwerte mit Input :: get ('yourValue'), aber wie wenden Sie einen XSS-Filter an? Es kommt mit dieser Funktionalität aus der Box oder was?

Antwort

2

In Laravel Vorlagen, alle Daten, die Form von Benutzereingaben kommt sollte in drei geschweifte Klammern eingeschlossen werden, um es zu sanieren:

<h1>{{{ $input }}}</h1> 

Da ist keine native xss Clean-Funktion in Laravel, aber wenn Sie desparate sind für eine gibt es einen Port der codeigniter Sicherheitsbibliothek finden Sie hier:

http://packalyst.com/packages/package/gvlatko/laravel-xss

+0

Was ist mit Daten, die Sie mit jquery bekommen? (Ajax Anrufe) –

3

Sie App::before Ereignis verwenden können alle Ihre Eingaben wie diese

filtern
App::before(function($request) 
{ 
    Input::merge(array_strip_tags(Input::all())); 
} 

Die array_strip_tags Funktion unten gegeben ist, habe ich es in eine Hilfsdatei setzen es direkt aufzurufen, können Sie es als eine Hilfsfunktion oder als Bibliothek verwenden können, aber es ist einfach, es als eine Hilfsfunktion zu verwenden, erstellen sie einfach eine Hilfsdatei innerhalb app/start/ Ordner und geben sie einen Namen, zum Beispiel custom_helper.php und schließen es in global.php Datei wie diese

require '/custom_helpers.php'; 

Funktion array_strip_tags

function array_strip_tags($array) 
{ 
    $result = array(); 
    foreach ($array as $key => $value) { 
     $key = strip_tags($key); 
     if (is_array($value)) { 
      $result[$key] = array_strip_tags($value); 
     } 
     else { 
      $result[$key] = strip_tags($value); 
     } 
    } 
    return $result; 
} 

Dies wird von einem Arbeitsprojekt von mir kopiert.

+3

Dies ist nur Strippen Tags, nicht verhindern, XSS –

+3

@SvenB, was sonst erwarten Sie für 'XSS' Filterung,' Cross Site Scripting' im Grunde injiziert ein Skript ' 'Tag und ich strippe Tags in diesem Fall. Was ist hier falsch? Kannst du mir 'XSS verhindern' erklären, wenn ich etwas verpasst habe? –

0

Ich glaube, Laravel hat leider keinen eingebauten XSS-Filter. Allerdings gibt es ein Paket, das Sie ausprobieren können laravel-xss und es ist einfach zu bedienen, müssen Sie nur etwas tun, wie: $user->about = Xss::clean(Input::get('about'); und Sie sind bereit zu gehen!

0

Es gibt auch ein anderes Paket für XSS-Filter für Laravel die here

Verwendung Beispiel heruntergeladen werden kann:

Einfach Formular Code-Schnipsel

{{Form::open(['route' => 'posts.store'])}} 
{{Form::text('title')}} 
{{Form::textarea('body')}} 
{{Form::submit('Post')}} 
{{Form::close()}} 

Filterpaket Nutzung

$rules = ['title' => 'required|min:13', 'body' => 'required|min:150']; 
$validator = Validator(Input::all(), $rules); 

if($validator->passes()){ 
    $xss = new XSS; 
    $xss->clean(Input::all()); 
    $input = $xss->get(); 

    $post = new Post; 
    $post->title = $input->title; 
    $post->body = $input->body; 

    // to test the results you can dd($input); & happy coding everyone! 
} 
+0

Natürlich würden Sie diese Abhängigkeiten injizieren oder eine Fassade einrichten und niemals "neu!" – hackel

1

So habe ich das gelöst. Inspiriert von @ the-alpha's Lösung. Ich benutze Laravel 4.2.

app/start/global.php:

function array_strip_tags($array) 
{ 
    $result = array(); 
    foreach ($array as $key => $value) { 
     $key = strip_tags($key); 
     if (is_array($value)) { 
      $result[$key] = array_strip_tags($value); 
     } 
     else { 
      $result[$key] = strip_tags($value); 
     } 
    } 
    return $result; 
} 

app/filters.php:

Route::filter('strip_tags', function() 
{ 
    Input::merge(array_strip_tags(Input::all())); 
}); 

app/routes.php:

Route::group(array('before' => 'strip_tags'), function(){ 
    // all routes under this route group will get all their inputs passed through the strip_tags php's function 
    Route::any('/', ['as' => 'home', 'uses' => '[email protected]']); 
    Route::any('/some-page', ['as' => 'some-page', 'uses' => '[email protected]']); 
} 
0

eine neue Helper-Datei erstellen und diese beiden Methoden setzen in Ihnen Helfer.

public static function globalXssClean() 
{ 
    // Recursive cleaning for array [] inputs, not just strings. 
    $sanitized = static::arrayStripTags(Input::get()); 
    Input::merge($sanitized); 
} 

public static function arrayStripTags($array) 
{ 
    $result = array(); 

    foreach ($array as $key => $value) { 
     // Don't allow tags on key either, maybe useful for dynamic forms. 
     $key = strip_tags($key); 

     // If the value is an array, we will just recurse back into the 
     // function to keep stripping the tags out of the array, 
     // otherwise we will set the stripped value. 
     if (is_array($value)) { 
      $result[$key] = static::arrayStripTags($value); 
     } else { 
      // I am using strip_tags(), you may use htmlentities(), 
      // also I am doing trim() here, you may remove it, if you wish. 
      $result[$key] = trim(strip_tags($value)); 
     } 
    } 

    return $result; 
} 

Dann diesen Code setzen in den Anfang der vor Filter (in Laravel 4 sollte es in app/filters.php sein).

App::before(function($request) 
{ 
    Helper::globalXssClean(); 
}); 
0

Ich untersuchte die Laravel Schutz {{{...}}} gegen Xss Angriff. Es verwendet nur die htmlentities() Funktion in der Art wie folgt: htmlentities('javascript:alert("xss")', ENT_QUOTES, 'UTF-8', false); Dies schützt Sie vor XSS nur, wenn Sie es richtig verwenden, bedeutet, verwenden Sie es nicht in bestimmten HTML-Tags, weil es in XSS-Angriffsmöglichkeit führen wird. Beispiel:

$a = htmlentities('javascript:alert("xss")', ENT_QUOTES, 'UTF-8', false); 
echo '<a href="'.$a.'">link</a>'; 

In diesem Fall ist Ihr Code anfällig für XSS.