Java

Các lỗ hổng thường gặp và cách thực hiện lập trình an toàn trong phát triển ứng dụng web (P6).

13. Thất thoát thông tin do kiểm soát lỗi và ngoại lệ không tốt

- Nguy cơ:

  • Việc hiển thị chi tiết và quá nhiều thông tin lỗi khi xử lý, các thông tin này rất có ích cho hacker. Hacker có thể dựa vào các thông tin này để đoán biết hệ thống cũng như tiếp cận, khai thác lỗ hổng ứng dụng.

- Phòng chống:

  • Yêu cầu tất cả các ngoại lệ đều phải được xử lý, và được lưu vào trong hệ thống log để được xử lý sau này.
  • Hạn chế hiển thị chi tiết miêu tả lỗi ra phía người dùng cuối, chỉ nên thông báo lỗi đơn giản nhất có thể.
public void prepara() {
    try {
        // code
    } catch(Exception e) {
        Logger.getLogger(GridDAO.class.getName()).log(Level.SEVERE, null, e);
    }
}
  • Trong struts2 ta có thể cấu hình trong struts.xml
<result name="exception">
    share/error.jsp?errorCode=excepion
</result>
</global-results>
<exception-mapping exception="java.lang.Exception" result="exception"/>
</Global-exception-mappings>
  • Sửa lỗi đối với việc cố tình tạo trang lỗi (Analysis of Codes) => có thể biết phiên bản chính xác của web server.
  • Thêm những dòng cấu hình này vào trong web.xml của ứng dụng, sau đó thêm file notfound.jsp
<error-page>
    <error-code>404</error-code>
    <location>/WEB-INF/jsp/pages/NotFound.jsp</location>
</error-page>
<error-page>
    <error-code>500</error-code>
    <location>/WEB-INF/jsp/pages/NotFound.jsp</location>
</error-page>

14. Sử dụng Captcha an toàn

- Nguy cơ:

  • Với các chức năng quan trọng, hoặc có thể lộ thông tin, hacker có thể sử dụng công cụ tự động cố gắng thực thi chức năng đó nhiều lần với các tham số khác nhau cho đến khi đạt được ý đồ của hacker.

- Phòng chống:

  • Sử dụng captcha và việc kiểm tra captcha của 1 chức năng phải thực hiện trước khi phần chính của chức năng thực thi.

15. Command injection

- Nguy cơ:

  • Khi ứng dụng cho phép người dùng đưa dữ liệu vào các câu lệnh thực thi trên hệ điều hành, hacker có thể lợi dụng để chèn các ký tự đặc biệt cho phép nối, thực thi nhiều câu lệnh khác của hệ điều hành.

- Phòng chống:

  • Validate chặt chẽ dữ liệu người dùng gửi vào, tránh các ký tự cho phép nối thêm các câu lệnh thực thi của hệ điều hành. Sử dụng whitelist là danh sách chức các ký tự được phép xuất hiện trong dữ liệu, để so sánh, đối chiếu loại bỏ các ký tự không nằm trong danh sách đó.
  • Ví dụ: loại bỏ các ký tự không nằm trong whitelist: a-z0-9-. như sau:
param.replacrAll("[^a-z0-9\-\.]", "");
Registration Login
Sign in with social account
or
Lost your Password?
Registration Login
Sign in with social account
or
A password will be send on your post
Registration Login
Registration