Laravel xuất hiện vào tháng 04-2011 và “cha đẻ” của nó là Taylor Otwell. Nó là 1 framework khá mới nhưng tài liệu từ trang chủ của laravel  khá đầy đủ, rõ ràng và dễ hiểu và nhiều ưu điểm hấp dẫn. Nếu bạn đã từng làm việc với các framework khác hoặc chỉ là người mới bắt đầu  tìm hiểu php framework thì việc tiếp cận laravel framework không phải là vấn đề khó khăn gì.

Nhưng có một điểm thiếu sót trong Laravel đó là XSS Filter. Mặc định Laravel không chống các lỗi XSS , nó không có các phương thức Cleaning/Filter cho dữ liệu nhập vào như trong các framework khác như Codeigniter, Zend, Yii…

Trong laravel hỗ trợ một phương thức đó là HTML::entities với cách viết ngắn gọn là e() ( kiểu viết tắt này đã bị loại bỏ trong Laravel 4) giúp loại bỏ hết các ký tự đặc biệt ra khỏi dữ liệu nhập vào tương tự với phương thức htmlentities() trong PHP thuần. Và nó cũng có thể sử dụng cho dữ liệu ra. Thường chúng ta không cho phép lưu dữ liệu có chứa bất kỳ các thẻ đặc biệt của HTML vào database và tốt hơn hết là nên lọc toàn bộ dữ liệu trước khi đưa vào CSDL. Nhưng nếu bạn lỡ quên HTML::entities cho một dữ liệu nhập vào nào đó thì đó có thể là nguy cơ tiềm ẩn dẫn tới khá năng website bị tấn công.

Vì vậy, chúng ta nên có một phương thức giúp loại bỏ toàn bộ XSS trên dữ liệu nhập vào và chỉ cần gọi khi cần thiết.

Đầu tiên bạn hãy tạo một model trong thư mục app/model đặt tên là Common.php chẳng hạn và đặt vào đó 2 phương thức dưới đây:


/*
* Phương thức chống Xss trên tất cả dữ liệu vào và ra.
*/
public static function globalXssClean()
{
// Sử dụng cho toàn bộ dữ liệu nhập vào
$sanitized = static::arrayStripTags(Input::get());
Input::merge($sanitized);
}

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

foreach ($array as $key => $value) {

//Loại bỏ các thẻ đặc biệt, có thể hữu ích khi ta sử dụng form động.
$key = strip_tags($key);

//Nếu dữ liệu là một mảng thì ta đưa nó vào hàm arrayStripTags
if (is_array($value)) {
$result[$key] = static::arrayStripTags($value);
} else {

//Mình sử dụng strip_tags(), bạn cũng có thể dùng htmlentities() nếu muốn.

//hàm trim() dùng để loại bỏ các khoảng trắng dư thừa, nếu không muốn bạn có thể xóa nó.
$result[$key] = trim(strip_tags($value));
}
}

return $result;
}

 

Sau đó bạn thêm nó vào before route của (application/routes.php) hoặc của app/filter.php (trong laravel 4) bằng cách:


Common::globalXssClean();

Hoặc nếu chỉ muốn sử dụng khi cần thiết thì bạn chỉ cần gọi lại phương thức này trước khi chèn hoặc xuất nội dung ra.

Ngoài cách trên bạn có thể sử dụng

{{{...}}}

cho dữ liệu xuất ra, như vậy nội dung xuất ra sẽ được chuyển sang dạng ký tự bình thường nhưng bạn luôn phải nhớ làm điều này đối với mọi dữ liệu xuất ra.

Như vậy toàn bộ trang web của bạn đã đảm bảo chống XSS. Giúp an toàn hơn trước phương thức tấn công rất phổ biến này.

Mình là 1 developer mới vào nghề, chưa có nhiều kinh nghiệm với lập trình web nhưng luôn muốn chia sẻ những hiểu biết của mình với các lập trình viên khác.
  • Địa chỉ: Hồ Chí Minh