1
Ban An toàn thông tin
Đinh Hữu Công
Hà Nội, 01/2012
Ban An toàn thông tin
Ban An toàn thông tin
2
Nội dung
Phần I: An toàn thông tin (ATTT) cho ứng dụng
web
Phần II: Hướng dẫn lập trình an toàn
Phần III: Thực hành
Phần IV: Thảo luận
Ban An toàn thông tin
Ban An toàn thông tin
3
Phần I: ATTT cho ứng dụng web
Tổng quan
1
Kiểm soát dữ liệu đầu vào
2
Kiểm soát dữ liệu đầu ra
3
Kiểm soát truy vấn database
4
Kiểm soát thao tác với file
5
Ban An toàn thông tin
Ban An toàn thông tin
4
1. 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
Ban An toàn thông tin
Ban An toàn thông tin
5
1. Tổng quan
Web
Browser
Web App
Database
File
Query
Query
Request
Request
I/O
I/O
Response
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
-
SQL Injection
-
XSS
-
CSRF
-
Lỗi phân quyền
-
Path traversal
- SQL Injection
- Mã hóa dữ
liệu
-
Path Traversal
-
Upload,
download
-
XSS
Mô hình ứng dụng web
Mô hình ứng dụng web
Các nguy cơ bị tấn công
Các nguy cơ bị tấn công
Thực hiện phòng chống
Thực hiện phòng chống
Ban An toàn thông tin
Ban An toàn thông tin
6
2. 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ả
Ban An toàn thông tin
Ban An toàn thông tin
3. 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
7
Ban An toàn thông tin
Ban An toàn thông tin
8
4. 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
Ban An toàn thông tin
Ban An toàn thông tin
5.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ệ
9
Ban An toàn thông tin
Ban An toàn thông tin
10
Phần II: Hướng dẫn lập trình an toàn
Tổng quan
1
Phòng chống SQL Injection
2
Phòng chống XSS
3
Phòng chống CSRF
4
Phòng chống lỗi thao tác file
5
Phòng chống lỗi mã hóa dữ liệu
6
Phòng chống lỗi phân quyền
7
1
Phòng chống lỗi phân quyền
8
Ban An toàn thông tin
Ban An toàn thông tin
1. 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
Nội dung
Khái niệm
Yêu cầu
Hướng dẫn
Ví dụ minh họa
11
Ban An toàn thông tin
Ban An toàn thông tin
12
2. Phòng chống SQL Injection
Khái niệm SQL Injection
Yêu cầu:
Dữ liệu input từ người dùng phải được truyền dưới dạng
tham số không được sử dụng cách cộng xâu trong các truy
vấn tới cơ sở dữ liệu để tránh lỗ hổng SQL Injection
Ban An toàn thông tin
Ban An toàn thông tin
13
2. 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ụ
Ban An toàn thông tin
Ban An toàn thông tin
14
2. Phòng chống SQL Injection
select * from users
where user_name=‘test’ or ‘1’=‘1’
and password=‘fsaf’
Ban An toàn thông tin
Ban An toàn thông tin
15
2. Phòng chống SQL Injection
Ban An toàn thông tin
Ban An toàn thông tin
16
2. Phòng chống SQL Injection
Đoạn code bị lỗi
Đoạn code bị lỗi
Ban An toàn thông tin
Ban An toàn thông tin
17
2. Phòng chống SQL Injection
Đoạn code an toàn
Đoạn code an toàn
Ban An toàn thông tin
Ban An toàn thông tin
18
3. 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: <,>,&,’,”,/
Ban An toàn thông tin
Ban An toàn thông tin
19
3. Phòng chống XSS
Thực hiện
Khi in các tham số ra HTML trong trang JSP sử dụng các
hàm an toàn
Ví dụ
Hàm bị lỗi Hàm an toàn
Grid: escapeHTMLInData="false" escapeHTMLInData="true"
${var} ${fn:escapeXml(var)}
<%=var%> <%=StringEscapeUtils.escapeHtml(var)%>
out.print(var) out.print(StringEscapeUtils.escapeHtml(var))
Ban An toàn thông tin
Ban An toàn thông tin
20
3. Phòng chống XSS
Đoạn code bị lỗi
Đoạn code bị lỗi
Ban An toàn thông tin
Ban An toàn thông tin
21
3. Phòng chống XSS
Đoạn code an toàn
Đoạn code an toàn
Ban An toàn thông tin
Ban An toàn thông tin
22
4. 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
Ban An toàn thông tin
Ban An toàn thông tin
23
4. Phòng chống CSRF
Thực hiện
Đối với các yêu cầu quan trọng, sử dụng thêm biến token.
Trên server sẽ kiểm tra token trong yêu cầu gửi lên từ
client, nếu token không hợp lệ thì yêu cầu sẽ không được
thực hiện
Ví dụ
Ban An toàn thông tin
Ban An toàn thông tin
24
4. Phòng chống CSRF
Đoạn code bị lỗi
Đoạn code bị lỗi
http://localhost:8084/TestStruts/HelloStruts2World.action?userName=123
Ban An toàn thông tin
Ban An toàn thông tin
25
4. Phòng chống CSRF
Đoạn code an toàn
Đoạn code an toàn
http://localhost:8084/TestStruts/HelloStruts2World.action? userName=123&
struts.token.name=struts.token&
struts.token=B154AN2E6MWVG74SZLZCGXN0RHF2546F