Bảo mật trong lập trình web bằng PHP và MySQL - Phần 2

Thảo luận trong 'Lập Trình PHP' bắt đầu bởi lebichvan888, 21/9/15.

  1. 1. Sự ngây ngô và ngó lơ với module search
    Khi bạn viết một module search chính xác thì sẽ kết hợp php với mysql thông qua câu select với điều kiện “=”. Và không chú trọng lắm vấn đề nhốt biến trong truy vấn.

    Mã:
    SELECT * FROM `product` WHERE `name`  = $search;
    
    Với $search = $_GET[‘search’]; chính là điều kiện trên thanh địa chỉ của bạn, ví dụ:
    Mã:
    domain.com/index.php?search=dtdd
    
    Vậy nếu như người truy cập gõ vào thanh address:
    [/code]
    domain.com/index.php?search=dtdd union select * from user.
    [/code]
    Khi đó họ sẽ thấy luôn các thông tin của bản user, công việc còn lại cũng chỉ là tấn công thôi.

    2. Tiếp với tuyệt chiêu 1/0
    Nếu sự ngây ngô của bạn vô tình được cứu vớt bởi config của mysql hay gì đó không hiển thị ra list user của bản user thì sẽ bị tấn công với chiêu này.

    1/0 là một phép chia sai, không có số nào chia được cho 0 cả, vậy mới là cái hay! Hay ở chổ đó là nếu như gán điều kiện nào đó xảy ra thì 1/0 xảy ra và 1/0 mà xảy ra tức là xảy ra lỗi vì 1 không bao giờ chia được cho 0.

    Bắt đầu dò tìm username với 1/0: domain.com/index.php?search=dtdd union select 1/0 from user where username=admin

    Nếu có tồn tại user admin thì sẽ trả về 1/0 và trả về lỗi. Rồi tiếp tục show pass của user đó ra: domain.com/index.php?search=dtdd union select password from user where username=admin

    Cách khắc phục nằm ở phần 1(khắc phục 2 vấn đề)

    3. Flood & Fake
    3.1 Form đăng ký mail nhận tin, đắng ký thành viên, nhận mã giảm giá,...
    Khi bạn làm các chức năng trên thì hầu như chỉ nghĩ đến việc chạy ổn là được, chạy ổn ở đây nằm lại ở mức độ là nhập vào ấn submit là insert được vào CSDL.

    3.2 Xem nhẹ quá trình cũng như không phân tích triệt để
    Khi đó các bạn chỉ xét điều kiện đúng là cho vào CSDL và không hạn chế gì cả, nhưng nếu các bạn bị một toolkit nào đó chạy auto và nhập vào dữ liệu đúng liên tục hàng giờ thì CSDL của bạn sẽ tiêu tùng vì vượt ngoài tầm kiểm soát và chịu đựng của server (tràn database).

    3.3 Phân tích form đăng ký nhận tin qua email
    Email được nhập vào phải chuẩn
    Khi nhập vào kiểm tra xem mail có đăng ký chưa, nếu chưa thì add vào CSDL, còn rồi thì thông báo đến người đăng ký biết là họ đã đăng ký.

    Riêng vấn đề cho add vào CSDL thì các bạn nên thêm một bước nữa chính là xác nhận qua (captcha) để chống vấn đề spam và làm hại đến server vì bị fake thông tin để flood.

    Như vậy, các thông tin liên quan đến form nhập liệu có insert vào CSDL thì nên chú ý phân tích đến quá trình flood và fake thông tin. Vấn đề cơ bản và dễ dàng nhất đó chính là tạo captcha theo google ở: google.com/recaptcha

    Hướng dẫn nhúng captcha google vào website tùy theo ngôn ngữ của bạn

    GV Huỳnh Công Đức

Chia sẻ trang này