I/O Response Kiểm soát dữ liệu đầu vào Kiểm soát truy vấn Database Kiểm soát dữ liệu đầu ra Kiểm soát Thao tác với file - Path Traversal - Upload, download - XSS Mô hình ứng dụng web
Trang 1Ban An toàn thông tin
Đinh Hữu Công
Trang 3Phần I: ATTT cho ứng dụng web
Trang 41 Tổng quan
ATTT cho ứng dụng Web: Đảm bảo ứng dụng web không bị tấn công gây hại cho hệ thống và người dùng
Mô hình ứng dụng web, các nguy cơ và cách phòng chống
Trang 5I/O Response
Kiểm soát
dữ liệu
đầu vào
Kiểm soát truy vấn Database
Kiểm soát
dữ liệu
đầu ra
Kiểm soát Thao tác với file
- Path Traversal
- Upload, download
- XSS
Mô hình ứng dụng web Các nguy cơ bị tấn công Thực hiện phòng chống
Trang 62 Kiểm soát dữ liệu đầu vào
Khái niệm
Dữ liệu do người dùng nhập vào được truyền lên server
Mọi cuộc tấn công đều phải thông qua dữ liệu đầu vào
Nguy cơ: SQL Injection, XSS (Cross Site
Scripting) , CSRF (Cross Site Request Forgery), Path Traversal, lỗi phân quyền
Thực hiện
Chỉ chấp nhận dữ liệu hợp lệ
Kiểm tra phía server là cần thiết
Kết hợp các tiêu chuẩn kiểm tra
Kiểm tra độ dài xâu là tiêu chuẩn nhanh và hiệu quả
Trang 73 Kiểm soát dữ liệu đầu ra
Khái niệm
Là nội dung server trả về HTML cho web browser
Chứa input người dùng nhập vào
Chứa kết quả truy vấn database
Nguy cơ:Lỗi trong quá trình output các dữ liệu sang HTML gây ra lỗi Cross-Site Scripting (XSS)
Thực hiện: Lọc các ký tự đặc biệt khi output
Trang 84 Kiểm soát truy vấn database
Khái niệm
Truy xuất dữ liệu của ứng dụng web trong database
Là thao tác chủ yếu trong ứng dụng web
Ngôn ngữ truy vấn: SQL, HQL
Nguy cơ
SQL Injection: Lỗi trong quá trình tạo câu query
Mã hóa không an toàn: Lỗi trong cách tổ chức dữ liệu
Thực hiện
Gán tham số cho các câu truy vấn database
Mã hóa an toàn
Trang 95.Kiểm soát thao tác với file
Khái niệm
Các thao tác đọc ghi file trên server
Nguy cơ: Lỗi liên quan đến việc xử lý đường dẫn file
Phần mở rộng của file
Chứa xâu \, / : Chuyển đến thư mục cha
Ký tự NULL: Kết thúc xâu đường dẫn
Thực hiện
Chặn các kí tự không hợp lệ trong tên file
Chỉ cho phép upload các file có phần mở rộng hợp lệ
Trang 10Phần II: Hướng dẫn lập trình an toàn
Trang 111 Tổng quan
Tài liệu do tập đoàn ban hành
Mục tiêu: Phòng chống các lỗi cụ thể khi phát triển ứng dụng web: SQL Injection, XSS, CSRF, lỗi thao tác với file, lỗi mã hóa dữ liệu, lỗi phân quyền
Đối tượng áp dụng: Nhân viên phát triển
Trang 132 Phòng chống SQL Injection
Thực hiện
Truy vấn SQL phải dùng PrepareStatement, tất cả tham số phải được add bằng hàm( setParam ), không được xử dụng cách cộng xâu trong truy vấn
Truy vấn HQL tất cả tham số phải được add bằng
hàm( setParam ), không được xử dụng cách cộng xâu trong truy vấn
Ví dụ
Trang 142 Phòng chống SQL Injection
select * from userswhere user_name=‘test’ or ‘1’=‘1’and password=‘fsaf’
Trang 152 Phòng chống SQL Injection
Trang 162 Phòng chống SQL Injection
Đoạn code bị lỗi
Trang 172 Phòng chống SQL Injection
Đoạn code an toàn
Trang 183 Phòng chống XSS
Khái niệm XSS (Cross Site Scripting)
Yêu cầu:
Thực hiện xử lý với tất cả dữ liệu đầu vào nhận được từ
trình duyệt, loại bỏ hoặc mã hóa dưới dạng HTML các ký
tự đặc biệt do client gửi lên máy chủ: <,>,&,’,”,/
Xử lý các ký tự nguy hiểm trong cơ sở dữ liệu trước khi gửi tới người dùng: <,>,&,’,”,/
Trang 203 Phòng chống XSS
Đoạn code bị lỗi
Trang 213 Phòng chống XSS
Đoạn code an toàn
Trang 224 Phòng chống CSRF
Khái niệm CSRF (Cross Site Request Forgery)
Yêu cầu:
Trong các tương tác của người dùng với cơ sở dữ liệu
thông qua các form, liên kết, sử dụng thêm biến token (được tạo ra mỗi đầu phiên truy cập của người dùng) như một tham số trong phương thức GET hoặc POST và kiểm tra giá trị token này tại server để xác nhận hành vi của
người dùng
Trang 244 Phòng chống CSRF
Đoạn code bị lỗi
http://localhost:8084/TestStruts/HelloStruts2World.action?userName=123
Trang 265 Phòng chống lỗi thao tác với file
Khái niệm thao tác file trong ứng dụng web
Yêu cầu:
Chặn các kí tự \, /, null khi xử lý với tên file
Giới hạn chỉ cho phép các định dạng file theo yêu cầu của ứng dụng được phép upload lên máy chủ Kiểm soát file upload ở phía server Lưu trữ các file upload tại một thư mục riêng nằm ngoài thư mục web hoặc không cho phép truy cập, thực thi trên các thư mục đó
Trang 275 Phòng chống lỗi thao tác với file
Thực hiện
Kiểm tra phía server
Kiểm soát phần mở rộng của file, chỉ cho phép thực hiện với các file có định dạng theo yêu cầu
Các hàm liên quan đọc ghi file, biến đường dẫn file phải được lọc /, \ và kí tự null
Ví dụ
Trang 285 Phòng chống lỗi thao tác với file
Đoạn code bị lỗi
Trang 295 Phòng chống lỗi thao tác với file
Đoạn code an toàn
Trang 306 Phòng chống lỗi mã hóa dữ liệu
Yêu cầu:
Những dữ liệu nhạy cảm trong cơ sở dữ liệu cần được mã hóa
Thực hiện
Mã hóa các dự liệu nhạy cảm trong cơ sở dữ liệu
Đối với các hàm mã hóa 1 chiều phải có thêm salt khi thực hiện mã hóa (salt là dữ liệu thêm vào plain text trước khi
mã hóa)
Nguyên lý: hash = encrypt(salt + pass)
Ví dụ: encryptPass = SHA1(“ttpmdn” + pass)
Ví dụ
Trang 316 Phòng chống lỗi mã hóa dữ liệu
QL0AFWMIX8NRZTKeof9cXsvbvu8=
QL0AFWMIX8NRZTKeof9cXsvbvu8=
Mã hóa 1 chiều không dùng salt
Mã hóa 1 chiều không dùng salt
Trang 327 Phòng chống lỗi phân quyền
Khái niệm phân quyền trong ứng dụng web
Yêu cầu:
Kiểm tra quyền trong từng request gửi lên server
Thực hiện
Kiểm tra quyền trong từng request gửi lên server
Kiểm tra quyền thực hiện action: Sử dụng VSA
Kiểm tra quyền tác động dữ liệu
Ví dụ
Trang 337 Phòng chống lỗi phân quyền
Đoạn code bị lỗi
Trang 347 Phòng chống lỗi phân quyền
Đoạn code an toàn
Trang 35Phần III: Thực hành
Trang 36Phần IV: Thảo luận
Question and answer