Tôi giả sử bạn đang sử dụng JSP.
Chỉ cần thoát trong khi đang hiển thị chỉ. Có thẻ JSTL<c:out>
là hoàn toàn phù hợp. Nó trốn thoát các thực thể HTML theo mặc định. Sử dụng nó để hiển thị mọi đầu vào do người dùng kiểm soát, chẳng hạn như URL yêu cầu, tiêu đề yêu cầu và thông số yêu cầu.
Ví dụ:
<input type="text" name="foo" value="<c:out value="${param.foo}" />">
Thoát trong khi nhập là không cần thiết. XSS không gây hại trong mã Java thô hoặc trong cơ sở dữ liệu SQL. Mặt khác, bạn cũng muốn lưu dữ liệu chưa được sửa đổi trong DB để bạn vẫn có thể thấy những gì người dùng thực sự đã nhập, để bạn có thể thực hiện các hành động trên mạng xã hội trên người dùng có hiệu quả.
Nếu bạn muốn biết những gì cần thoát trong khi nhập, nó sẽ là SQL injection. Trong trường hợp này, chỉ cần sử dụng PreparedStatement
thay vì thường xuyên Statement
bất cứ khi nào bạn muốn lưu bất kỳ đầu vào nào do người dùng kiểm soát vào cơ sở dữ liệu.
Ví dụ:
create = connection.prepareStatement("INSERT INTO user (username, password) VALUES (?, MD5(?))");
create.setString(1, username);
create.setString(2, password);
create.executeUpdate();
Bài viết của Joel Spolsky * Làm cho mã trông sai * bài viết - http://www.joelonsoftware.com/articles/Wrong.html - là về loại vấn đề chính xác này. – mob
Tôi thực sự thích bài viết đó :) – Kyle
Thực sự tốt. – pastapockets