Siêu thị PDFTải ngay đi em, trời tối mất

Thư viện tri thức trực tuyến

Kho tài liệu với 50,000+ tài liệu học thuật

© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Cách phát hiện và khắc phục lỗi SQL injection trong PHP.doc
MIỄN PHÍ
Số trang
2
Kích thước
32.1 KB
Định dạng
PDF
Lượt xem
707

Cách phát hiện và khắc phục lỗi SQL injection trong PHP.doc

Nội dung xem thử

Mô tả chi tiết

Cách phát hiện và khắc phục lỗi SQL injection trong PHP

SQL Injection Là một trong những kiểu hack web phổ biến vào những năm trước đây, nhưng mãi

cho đến hiện nay vẫn có khá nhiều trang web vẫn mắc lỗi này vì thế trong bài viết này sẽ mô tả về

SQL injection và bạn sẽ cảm thấy an tâm hơn khi hiểu rõ về nó.

Bằng cách inject các mã SQL query/command vào input trước khi chuyển cho ứng dụng web xử lí,

bạn có thể login mà không cần username và password, remote execution, dump data và lấy root

của SQL server.

Công cụ dùng để tấn công là một trình duyệt web bất kì, chẳng hạn như Internet Explorer,

Netscape, ...etc

Cách phát hiện:

1. Ở PHP thông thường sẽ có 2 dạng về lỗi này, dạng thứ nhất có thể nhìn thấy được - gọi là

thẳng là SQL injection, dạng thứ hai không nhìn thấy đựơc mặc dù nó bị lỗi thiệt - gọi là Blind SQL

injection.

Thông thường thì để kiểm tra lỗi SQL injection ở dạng thứ nhất, ta thường thêm dấu ' (dấu nhấy)

vào phía sau các địa chỉ có dạng: user.php?id=1 hoặc user.php?id=

vd: http://site.com/user.php?id=1' và http://site.com/user.php?id=' đều được.

2. Còn ở dạng thứ hai thì khó hơn, bởi vì người ta có thể dễ dàng ngăn chặn các thông báo lỗi gửi

từ máy chủ bằng cách thêm ký tự @ trước câu lệnh SQL, ví dụ:

view plainprint?

1. $id = $_GET[id];

2. mysql_query("SELECT * FROM sanchoituoitre.vn WHERE id=$id");

$id = $_GET[id]; @mysql_query("SELECT * FROM sanchoituoitre.vn WHERE id=$id");

Nếu từ phía hacker thì sẽ khó có thể tìm ra được, vì thế nếu bạn không rõ về SQL injection bạn có

thể thêm @ vào trước câu lệnh như trong ví dụ trên dùng để che dấu lỗi.

Hoặc sử dụng error_reporting(0); ở đầu đoạn PHP để che dấu lỗi.

Còn nếu site cần kiểm tra do bạn làm webmaster thì có thể làm như sau:

view plainprint?

1. $id = $_GET[id];

2. mysql_query("SELECT * FROM sanchoituoitre.vn WHERE id=$id");

$id = $_GET[id]; @mysql_query("SELECT * FROM sanchoituoitre.vn WHERE id=$id");

Với cách phát hiện: http://site.com/user.php?id=' thì biến $id sẽ được khai báo là ' (dấu nháy) nếu

bị dính lỗi, và trong đoạn code đã dùng print để in giá trị của biến $id ra, nếu nhìn thấy dấu nhấy thì

là dính lỗi, nếu không thì hãy kiểm tra lại 1 lần nữa vì trong đoạn code trên hoàn toàn chưa được

fix lỗi, he he.

Cách khắc phục:

Cũng căn cứ theo ví dụ trên, bạn có thể dùng hàm intval() để khắc phục lỗi này, ví dụ:

+ Chưa fix (unfix):

view plainprint?

1. $id = $_GET[id];

Tải ngay đi em, còn do dự, trời tối mất!