Chức năng Thêm mới thƣờng gặp các lỗi XSS, SQL Injection, CSRF và các lỗi liên quan đến việc xác thực phân quyền (lỗi leo quyền). Phƣơng pháp tiếp cận hệ thống để kiểm tra các lỗi này là dựa vào việc nhập dữ liệu đầu vào trên giao diện có sử dụng thêm các công cụ hỗ trợ nhƣ firebug. Chúng tôi thiết kế các trƣờng hợp kiểm tra cho chức năng Thêm mới nhƣ trong bảng 2.6.
Bảng 2.6. Các ca kiểm thử với màn hình có chức năng Thêm mới
Mã ca kiểm
thử
Mục đích
kiểm thử Các bƣớc thực hiện mong muốn Kết quả Ghi chú
CHỨC NĂNG: Thêm mới
Date time
F4_R1_1 SQL Injection (Kiểm tra khi Insert)
1. Mở firebug/ Click element lên control 2. Sửa value của item dùng làm tiêu chí tìm kiếm nhƣ sau: (SELECT SYSDATE FROM dual) 3. Nhập dữ liệu khác hợp lệ 4. Thêm mới Kết quả mong muốn: - Hệ thống không cho phép Insert - Hoặc cho phép Insert đúng chuỗi dữ liệu nhập vào và hiển thị ra cũng - Phạm vi kiểm thử: Mỗi trƣờng 1 ca - Biểu hiện lỗi: HT Insert DL trong câu truy vấn (giá trị 1) vào DB
- Giải thích lỗi:
+ Câu SQL đƣợc thành lập: Insert into TableName values ((SELECT 1 FROM dual), value2, value3,… );
36
Combobox/ Data picker/ popup
F4_R1_ 2
SQL Injection (Kiểm tra khi Insert)
1. Mở firebug/ Click element lên control 2. Sửa value của item dùng làm tiêu chí tìm kiếm nhƣ sau: (SELECT 1 FROM dual) 3. Nhập dữ liệu khác hợp lệ 4. Thêm mới - Hệ thống không cho phép Insert - Hoặc cho phép Insert đúng chuỗi dữ liệu nhập vào và hiển thị ra cũng đúng chuỗi đã nhập - Phạm vi kiểm thử: Mỗi trƣờng 1 ca - Biểu hiện lỗi: HT Insert DL trong câu truy vấn (giá trị 1) vào DB
- Giải thích lỗi:
+ Câu SQL đƣợc thành lập: Insert into TableName values ((SELECT 1 FROM dual), value2, value3,… );
+ Câu SQL đƣợc thành lập: update TableName set Field = (SELECT 1 FROM dual) F4_R2_ 3 XSS - Cross site scripting (Kiểm tra việc hiển thị các giá trị trong Combobox/ Data picker/ popup với script HTML)
Pre: Giả sử Combobox/ Data picker/ popup A hiển thị NAME đƣợc tạo từ danh mục B.
1. Trong danh mục B, tạo dữ liệu nhập NAME là chuỗi script: <b>1</b> 2. Check hiển thị dữ liệu trong Combobox/ Data picker/ popup A
Dữ liệu đƣợc hiển thị lên không bị lỗi, hiển thị đúng định dạng đã nhập ở danh mục B
- Phạm vi kiểm thử: Mỗi trƣờng tƣơng ứng 1 case (chỉ cần test với combo lấy dự liệu từ danh mục trong DB)
- Biểu hiện lỗi:
+ hiển thị dạng mã hóa khi view lên + hoặc chỉ hiển thị số 1 trong combo
F4_R2_ 4
XSS (Kiểm tra việc hiển thị các giá trị trong Combobox/ Data picker/ popup với script HTML đƣợc mã hóa hexa dạng URL)
Pre: Giả sử Combobox/ Data picker/ popup A hiển thị NAME đƣợc tạo từ danh mục B.
1. Trong danh mục B, tạo dữ liệu nhập NAME là chuỗi script mã HEXA dạng URL: %3cb%3e1%3c%2fb%3e
2. Check hiển thị dữ liệu trong Combobox/ Data picker/ popup A
Dữ liệu đƣợc hiển thị lên không bị lỗi, hiển thị đúng định dạng đã nhập ở danh mục B
- Phạm vi kiểm thử: Mỗi trƣờng tƣơng ứng 1 case (chỉ cần test với combo lấy dự liệu từ danh mục trong DB)
- Biểu hiện lỗi:
+ hiển thị dạng mã hóa khi view lên + hoặc chỉ hiển thị số 1 trong combo
F4_R2_ 5
XSS (Kiểm tra việc hiển thị các giá trị trong Combobox/ Data picker/ popup với script HTML đƣợc mã hóa hexa dạng
Pre: Giả sử Combobox/ Data picker/ popup A hiển thị NAME đƣợc tạo từ danh mục B.
1. Trong danh mục B, tạo dữ liệu nhập NAME là chuỗi script mã HEXA dạng HTML: <b>1</b>
2. Check hiển thị dữ liệu trong Combobox/ Data picker/ popup A
Dữ liệu đƣợc hiển thị lên không bị lỗi, hiển thị đúng định dạng đã nhập ở danh mục B
- Phạm vi kiểm thử: Mỗi trƣờng tƣơng ứng 1 case (chỉ cần test với combo lấy dự liệu từ danh mục trong DB)
- Biểu hiện lỗi:
+ hiển thị dạng mã hóa khi view lên + hoặc chỉ hiển thị số 1 trong combo
38
Textbox/ Textarea (trƣờng lƣu trong DB là trƣờng số)
F4_R1_ 6
SQL Injection (Kiểm tra khi Insert)
1. Trong phần Thêm mới dữ liệu, nhập thông tin sau vào 1 trƣờng textbox: (SELECT 1 FROM dual)
2. Nhập dữ liệu khác hợp lệ 3. Thêm mới - Hệ thống không cho phép Insert - Hoặc cho phép Insert đúng chuỗi dữ liệu nhập vào và hiển thị ra cũng đúng chuỗi đã nhập
- Phạm vi kiểm thử: Mỗi trƣờng tƣơng ứng 1 case
- Biểu hiện lỗi: HT Insert DL trong câu truy vấn (giá trị 1) vào DB
- Giải thích lỗi:
+ Câu SQL đƣợc thành lập: Insert into TableName values ((SELECT 1 FROM dual), value2, value3,… );
+ Câu SQL đƣợc thành lập: update TableName set Field = (SELECT 1 FROM dual)
Textbox/ Textarea (trƣờng lƣu trong DB là xâu)
F4_R1_ 7
SQL Injection (Kiểm tra khi Insert)
1. Trong phần Thêm mới dữ liệu, nhập thông tin sau vào 1 trƣờng textbox: (SELECT 1 FROM dual)
2. Nhập dữ liệu khác hợp lệ 3. Thêm mới - Hệ thống không cho phép Insert - Hoặc cho phép Insert đúng chuỗi dữ liệu nhập vào và hiển thị ra cũng đúng chuỗi đã nhập
- Phạm vi kiểm thử: Mỗi trƣờng tƣơng ứng 1 case
- Biểu hiện lỗi: HT Insert DL trong câu truy vấn (giá trị 1) vào DB
- Giải thích lỗi:
+ Câu SQL đƣợc thành lập: Insert into TableName values ((SELECT 1 FROM dual), value2, value3,… );
+ Câu SQL đƣợc thành lập: update TableName set Field = (SELECT 1 FROM dual)
F4_R2_ 8
XSS (Kiểm tra lỗi khi nhập Script HTML)
1. Nhập vào textbox đoạn script: <b>1</b> 2. Nhập tiêu chí khác hợp lệ 3. Thêm mới - Hệ thống không cho phép Insert - Hoặc cho phép Insert đúng chuỗi dữ liệu nhập vào và hiển thị ra cũng đúng chuỗi đã nhập (không thực thi script)
- Phạm vi kiểm thử: Mỗi trƣờng tƣơng ứng 1 case (chỉ cần test với các trƣờng có DL đƣợc hiển thị trên hệ thống)
- Biểu hiện lỗi:
+ Giá trị hiển thị là 1 (có thể đƣợc in đậm)
+ Hoặc bị mã hóa khi view lên
- Giải thích lỗi: Lỗi XSS: dev cần xử lý chặn việc thực thi các script html khi hiển thị
F4_R2_ 9
XSS (Kiểm tra lỗi khi nhập Script HTML đƣợc mã hóa hexa dƣới dạng URL)
1. Nhập vào đoạn script <b>1</b> nhƣng đƣợc mã hóa dƣới dạng Hexa dạng URL: %3cb%3e1%3c%2fb%3e 2. Nhập tiêu chí khác hợp lệ 3. Thêm mới - Hệ thống không cho phép inser - Hoặc cho phép Insert đúng chuỗi dữ liệu nhập vào và hiển thị ra cũng đúng chuỗi đã nhập (không thực thi script)
- Phạm vi kiểm thử: Mỗi trƣờng tƣơng ứng 1 case (chỉ cần test với các trƣờng có DL đƣợc hiển thị trên hệ thống)
- Biểu hiện lỗi:
+ Giá trị hiển thị là 1 (có thể đƣợc in đậm)
+ Hoặc bị mã hóa khi view lên
F4_R2_ 10
XSS (Kiểm tra lỗi khi nhập Script HTML đƣợc
1. Nhập vào đoạn script <b>1</b> nhƣng đƣợc mã hóa dƣới dạng Hexa dạng HTML: <b>1</b> - Hệ thống không cho phép Insert - Hoặc cho phép Insert đúng chuỗi dữ liệu nhập vào
- Phạm vi kiểm thử: Mỗi trƣờng tƣơng ứng 1 case (chỉ cần test với các trƣờng có DL đƣợc hiển thị trên hệ thống)
40 Hành động (action) F4_R4_ 11 Kiểm tra xác thực, phân quyền (Kiểm tra URL Manipulation - Lỗi leo quyền với các action có phân quyền thực hiện) 1. Đăng nhập bằng user 1
2. Sửa giá trị của trƣờng đƣợc phân quyền: có thể thực hiện 1 trong các cách sau:
- Cách 1: Vào firebug/ HTML/ di chuyển con trỏ đến trƣờng đƣợc phân quyền miền dữ liệu => Sửa Value/ID = Value/ID tồn tại trong DB, nhƣng là miền dữ liệu không thuộc quyền của user 1 => thực hiện action
- Cách 2:
+ Tab 1: Thực hiện thao tác/ Copy Location with Parameters của thao tác
+ Tab 2: Paste link trên thanh ađress. Nếu cần thì:
=> sửa ID/tham số của bản ghi vừa thực hiện thao tác = 1 ID/tham số tồn tại trong DB
=> sửa các tham số, nếu hệ thống tự reset tham số đó khi thực hiện thao tác (VD: 1 số hệ thống đƣợc xử lý reset token trƣớc mỗi thao tác nhƣ thêm, sửa, xóạ..)
+ Tab 1: Đăng xuất khỏi hệ thống
+ Tab 2: enter để chạy link
- Cách 3: Dùng tamper
Thông báo không có quyền thực hiện action
- Phạm vi kiểm thử: Action làm thay đổi DL trong DB (thêm, sửa, xóa, download, upload, import, action nghiệp vụ quan trọng...)
- Biểu hiện lỗi: Thực hiện đƣợc action với bản ghi có id/tham số vừa sửa
F4_R4_ 12 Kiểm tra xác thực, phân quyền (Kiểm tra URL Manipulation - Lỗi leo quyền - 2 user với các action có phần quyền Miền dữ liệu) 1. Firefox: + Đăng nhập bằng user 1
+ Sửa giá trị của trƣờng đƣợc phân quyền: Vào firebug-> HTML-> di chuyển con trỏ đến trƣờng đƣợc phân quyền miền dữ liệu -> lấy Value/ID
2. Chrome:
+ Đăng nhập bằng user 2
+ Sửa giá trị của trƣờng đƣợc phân quyền: Vào firebug-> HTML-> di chuyển con trỏ đến trƣờng đƣợc phân quyền miền dữ liệu -> Sửa Value/ID = Miền dữ liệu thuộc quyền của user 1, không thuộc quyền của user 2
+ Thực hiện action (Chú ý: khi thực hiện action, user 1 ở trình duyệt firefox vẫn đang đăng nhập và chƣa bị hết session)
Thông báo không có quyền thực hiện action
- Phạm vi kiểm thử: Các action có liên quan đến phân quyền miền dữ liệụ VD: + Đơn vị có phân quyền miền DL cho từng user
+ Combo, listbox: có phân quyền mỗi user 1 miền
+ Chức năng mà mỗi user có phạm vi quyền khác nhau (thêm, sửa, xóa, download, upload …)
+ Chú ý: 1 số trƣờng hợp thêm mới mà không gửi value/ ID đƣợc phân quyền miền DL lên server thì thƣờng không cần check lỗi này
- Biểu hiện lỗi: Hệ thống cho phép thực hiện action trên trên Miền dữ liệu không đƣợc phân quyền (lỗi leo quyền)
F4_R4_ 13 Kiểm tra xác thực, phân quyền (Kiểm tra URL Manipulation - Lỗi leo quyền với 1. Đăng nhập bằng user 1
2. Chọn dữ liệu mà user 1 không có quyền thực hiện action (do có ràng buộc, VD: bản ghi bị khóa - không cho phép thực hiện action): lấy ID dữ liệu của thao tác
3. Chọn dữ liệu mà user 1 có quyền thực
Thông báo không có quyền thực hiện action (việc check validate các ràng buộc phải thực
- Phạm vi kiểm thử: Check với trƣờng hợp:
+ Các action tác động đến các DL đã bị ràng buộc không cho phép thực hiện action (VD: Thêm, sửa, xóa… với các DL đã bị khóa hoặc hết hiệu lực, vv...). - Biểu hiện lỗi: Hệ thống thực hiện thành
42 F4_R3_
14
CSRF (Kiểm tra lỗi với các chức năng - action tác động đến DB) - Cách 1: 1. Mở firebug
2. Vào màn hình nhập đầy đủ thông tin (chƣa nhấn action)
3. Gõ lệnh java script:
tctResetToken("<giá trị token mới>") để reset lại toàn bộ token trƣớc khi nhấn action
4. Nhấn action
5. Kiểm tra hồi đáp từ ứng dụng
- Cách 2:
1. Ứng dụng: Vào màn hình nhập đầy đủ thông tin (chƣa nhấn action)
2. Tamper data: click start 3. Ứng dụng: Nhấn action
3. Tamper data: Click Tamper => Sửa trƣờng value của tất cả các Token trong Post data = 1 giá trị bất kỳ => submit. Tuy nhiên, với 1 số trƣờng hợp thì server lại check giá trị token đc gửi kèm trong link, chứ không phải trong post data, khi đó cách test này không chính xác
4. Ứng dụng: Kiểm tra hồi đáp từ ứng dụng
Chƣơng trình thông báo Token không hợp lệ.
- Phạm vi kiểm thử: Mỗi action tƣơng ứng 1 case (thƣờng chỉ check với các chức năng làm thay đổi DL trong DB (thêm, sửa, xóa, action quan trọng khác ...) + các action quan trọng
- Biểu hiện lỗi:
+ Không tìm thấy token (không gửi token lên server)
+ Hoặc vẫn thực hiện thao tác thành công
F4_R12 _15 Để lộ thông tin do xử lý không đúng cách (Không bắt exception dẫn đến full ra trang lỗi khi gặp ngoại lệ)
1. Dùng các tool hỗ trợ để tạo DL ngoại lệ gửi lên server (VD: firebug, tamper datạ..)
Ví dụ:
+ Với Tìm kiếm: Có thể xóa control là tiêu chí tìm kiếm => Tìm kiếm
+ Với Thêm mới/ Sửa: nhập DL quá maxlength của trƣờng trong DB. Cách thực hiện
=> Chỉnh lại maxlength của control (VD: textbox) bằng firebug:
=> Vào Firebug/ HTML/ Click con trỏ inspect (phía trên, bên trái Firebug) => Click vào control trên chƣơng trình => Vào firebug sửa maxlength
(maxsize) của textbox quá maxlength lƣu trƣờng đó trong DB (Hệ thống cho phép lƣu tối đa 10 ký tự trong DB, sửa thành 20 ký tự)
=> Nhập DL lớn hơn Maxlength thực (10 ký tự)
=> Nhấn nút thực hiện: Thêm mới/ Sửa/ Đăng nhập/ ….
+ Với Xóa: Vào firebug xóa ID của bản
Hệ thống forward sang 1 trang thông báo "Có lỗi xảy ra"
- Phạm vi kiểm thử: Tất cả các action trên màn hình (Tìm kiếm, thêm, sửa, xóa, nghiệp vụ, …)
- Biểu hiện lỗi: Hệ thống full ra exception do dev chƣa bắt ngoại lệ
44