Tôi không nghĩ rằng bạn có thể dễ dàng làm các unit test cho loại điều. Nó sẽ yêu cầu ứng dụng của bạn được viết theo cách có lợi cho việc chế nhạo các bộ phận thành phần của nó và chắc chắn liên quan đến công việc thủ công liên tục (đảm bảo có kiểm tra và mocks cho mọi thứ, kiểm tra vô số các cuộc tấn công, v.v.).
Điều duy nhất nhất định là nếu bạn có thể nhận được một số công cụ tự động phạm vi rộng luôn được cập nhật, bất kỳ ai đã đưa nó cho bạn không tính phí đủ.
Các hình thức bảo vệ chống lại các cuộc tấn công đó đều khá nổi tiếng và dễ dàng để sử dụng:
- Luôn escape variables in sql, hoặc tốt hơn là sử dụng prepared statements
- Nếu bạn không cần để chấp nhận và duy trì đầu vào HTML , luôn luôn
htmlspecialchars
bất kỳ biến nào đi vào HTML (lưu ý rằng có nhiều định dạng như BBCode, MarkDown, Textile v.v. với mục đích duy nhất là cho phép một tập con tùy chọn định dạng hữu ích mà không cần mở hộp Pandora)
- Nếu bạn hoàn toàn, chắc chắn nhất cần chấp nhận, lưu trữ và phục vụ dữ liệu HTML sau đó có HTMLPurifier có thể giúp - nhưng làm điều đó chỉ như là một phương sách cuối cùng
Vì vậy, tôi muốn nói rằng đó là giá trị tốt hơn nhiều cho thời gian của bạn để đảm bảo rằng bạn làm theo những thực hành này/sử dụng những công cụ này. Ngoài ra, nếu bạn phễu tất cả quyền truy cập vào hai hệ thống con này (đầu ra sql và HTML) thông qua một phần được xác định rõ ràng của ứng dụng của bạn (các phương thức truy cập cơ sở dữ liệu thoát khỏi tất cả đầu vào bất kể điều gì; các biến đầu vào thoát và đưa chúng vào một "mẫu HTML" được cung cấp mà bạn sau đó lặp lại) sau đó nó trở nên dễ dàng để kiểm tra đơn vị các hệ thống con này. Các khung công tác PHP đã quyết định đã làm điều này.
Tại thời điểm này, cơ hội duy nhất thực sự giới thiệu lỗ hổng là bằng cách tránh hoặc lạm dụng các hệ thống con này. Theo ý kiến của tôi, bạn nên cố gắng chi tiêu và thực hiện các quy trình viết mã tốt để viết các bài kiểm tra đơn vị để ngăn ngừa các lỗ hổng trong logic nghiệp vụ của bạn (các bài kiểm tra đơn vị cho mã vệ sinh của bạn dĩ nhiên là hoàn toàn khác).
Cuối cùng, có automatedSQLinjectiontools và XSS-relatedtools mà bạn có thể sử dụng để thăm dò các ứng dụng web. Nhưng trừ khi ai đó thuê bạn để làm thử nghiệm thâm nhập, tốt hơn là sử dụng chúng như bạn sẽ sử dụng bảo vệ trong giới tính: sử dụng nó, nhưng không tin vào nó.
Không chắc chắn đây có phải là trường hợp cho Kiểm tra đơn vị hay không ... Quan tâm để xem câu trả lời nào xuất hiện. –
Tôi bị cám dỗ trả lời, 'Viết kịch bản tìm kiếm' (SELECT | INSERT | UPDATE). * \ $ \ W +. * ", Nếu có, mã của bạn đã thất bại.' – cwallenpoole
Tôi đồng ý, đây không phải là về thử nghiệm đơn vị, đây là về việc đảm bảo rằng mã của bạn chỉ sử dụng các câu lệnh đã chuẩn bị. Sử dụng hệ thống PDO, và sau đó liên kết các biến thông qua hệ thống đó. – cwallenpoole