6 lỗi bảo mật developer thường xuyên gặp phải
Sau đây sẽ là 6 lỗi bảo mật developer thường xuyên gặp phải được sắp xếp mức độ nguy hiểm giảm dần theo ý kiến cá nhân. Các bạn hãy cùng Bizfly Cloud theo dõi nhé!
1. SQL Injection
Không phải nói nhiều về cái lỗi thần thánh này, gần như Dev mới 96.69% đều mắc phải nó, thậm chí các Dev có kinh nghiệm cũng có thể mắc.
Lấy ví dụ phần login cho một website.
Lỗi xảy ra như thế nào?
Câu query bạn mong muốn sẽ là:
$sql = "select * from users where username='".$_POST['username']."' and password='".$_POST['password']."'"; //
Còn gì tuyệt vời hơn nếu người dùng nhập, ví dụ username là quydo, mật khẩu là matkhauManhVL.
Nhưng vấn đề là nhiều thanh niên không thích thế, ví dụ nhập username là quydo' or 1-- và mật khẩu là nhập linh tinh là kadslfjladsjfkldsfjladskfjaskldfjadsklf
Khi đó query mà bạn đang chờ sẽ là:
$sql = "select * from users where username='quydo' or 1 limit 1– – and password='kadslfjladsjfkldsfjladskfjaskldfjadsklf'
Câu query luôn đúng bởi – – là dùng để kết thúc 1 câu query, như // trong php đó.
Sự nguy hiểm
User chạy ở đây là user connect tới database server (không phải user của web server).
- Thứ nhất là có thể truy xuất gần như là toàn bộ thông tin về cơ sở dữ liệu đang thao thác và có thể các database (do grant quyền).
- Thứ hai là có thể query insert, update, drop đến database hiện tại.
VD có thanh niên chạy drop database database_name thì thôi xong (cái này phụ thuộc nhiều yếu tố mới thành công)
- Thứ ba là có thể upload backdoor (cụ thể là php shell), phải phụ thuộc khá nhiều điều kiện.
User chạy là root (hoặc user có quyền với file), biết được cấu trúc website đang chạy (ví dụ biết được /var/www/domain.com), cái này mà được thì rất nguy hiểm.
Thường thì các attacker sẽ tìm phần login admin => login vào admin backend, dựa vào các bug (chủ yếu là upload) để upload backdoor (php shell) lên.
2. XSS
Lấy ví dụ phần search cho một website.
Lỗi xảy ra như thế nào?
Giả sử url trang search là:
http://domain.com/search.php?keyword=user_keyword
Và trong trang search.php, ở trang search.php bạn có dòng:
echo "Kết quả tìm kiếm cho từ khóa: ".$_GET['keyword'];
- Nếu người dùng nhập keyword bình thường, ví dụ: xem phim xxx thì ổn.
- Nhưng nếu người dùng thích nhập khác, ví dụ: aloxo xss
Thì lúc load trang search.php?keyword=
1 cái alert bằng javascript sẽ xuất hiện với nội dung "aloxo xss"
Sự nguy hiểm
Bạn tham khảo tại link sau: https://kipalog.com/posts/Lo-hong-bao-mat-Cross-Site-Scripting–XSS–co-gi-nguy-hiem
Thường thì các form input hay bị như thông tin tài khoản, phần bình luận comment.
3. Upload
Lỗi xảy ra như thế nào?
Dev không check kiểu file, hoặc chỉ check ở máy client.
Ví dụ: check kiểu file = javascript trước khi gửi lên là không ổn, có thể chỉnh sửa js nên bypass được.
Code check không chính xác, có thể bypass được, ví dụ dùng cái này là gặp sự cố ngay:
if($FILES['file_field']['type'] == 'jpg') echo "tiếp tục";
Không thay đổi tên, lấy tên theo tên client gửi lên. Người dùng có thể cho tên file là shell.php.jpg, backdoor.php.rar… Có 1 bug mà rất nguy hiểm, dựa vào hàm moveuploaded_file để upload php backdoor lên.
Link sau đây:
http://www.paulosyibelo.com/2015/03/exploiting-php-upload-forms-with-cve.html
4. Insecure Direct Object References
Cái này cũng khá hay gặp, nhất là ở phần API, bạn xem tham khảo của #toidicodedao.
- Ví dụ ở app, sẽ có 1 API /user/transaction/Trans_id để lấy info giao dịch của người dùng
user gọi api, api get thông tin giao dịch có id=Trans_id để trả lại cho user.
- Lỗi ở đây là Dev không kiểm tra Trans_id có thuộc về user đó không?
Nên có thể thay Trans_id khác, mà API vẫn trả về.
5. Remote Code Execution
Để chạy được cái này cần khá nhiều điều kiện, bạn có thể search Google để biết thêm chi tiết.
6. Remote file inclusion
Lỗi này khá hiếm khi xảy ra, nếu mà đã xảy ra thì lại khá nguy hiểm, khi file include là backdoor shell.
Các lỗi mà bạn không hiểu thì có thể Google để tìm hiểu thêm. 4 lỗi đầu là nguy hiểm nhất nên mình có ví dụ cơ bản.
Có thể bạn quan tâm: Code Monk(ey): Kiểm tra Array trong JavaScript
Nguồn: Techtalk via kipalog