簡體   English   中英

如何防止 JSP 中的 SQL 注入?

[英]how to prevent SQL Injection in JSP?

就在上周,我正在做一些 PHP 的事情。 我做了一個小解決方案來防止 SQL 注射。 PHP 一直是我的男人,它有 3 種解決方案可供使用(也許更多)。 一種是使用stripslashes() function 啟用“魔術查詢”。 另一種(推薦)是使用mysql_real_escape_string() function。 這么簡單,我的問題就解決了。 然而,當談到 JSP 時,事情似乎並不那么簡單。 我搜索並沒有找到任何內置的 function 來去除斜線或做這些事情(我相信這樣的功能可以使用基本的 JAVA 函數來實現,但是......)。

請幫助我保護我的數據庫。 我聽說過PreparedStatement ,但真的無法理解它嗎? (我感受到了新手的真正含義)。

只需使用PreparedStatement而不是Statement

即使用

String sql = "INSERT INTO tbl (col1, col2, col3) VALUES (?, ?, ?)";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, col1);
preparedStatement.setString(2, col2);
preparedStatement.setString(3, col3);
preparedStatement.executeUpdate();

代替

String sql = "INSERT INTO tbl (col1, col2, col3) VALUES ('" + col1 + "', '" + col2 + "', '" + col3 + "')";
statement = connection.createStatement();
statement.executeUpdate(sql);

PreparedStatement還為其他類型提供了方便的 setter 方法,例如setInt()setDate()setBinaryStream()等。

請注意,此問題與 JSP 無關。 一般與Java有關。 在 JSP class 中編寫原始 Java 代碼也被認為是一種不好的做法 最佳實踐是創建一個獨立的 class,它在特定表上執行所有 DB 交互任務,該表也稱為 DAO(數據訪問對象)class。 然后,您可以在 servlet class 中導入/使用此 DAO class。

也可以看看:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM