[英]Blind Sql injection despite using prepared statement
最近,我們對應用程序進行了安全掃描,發現很少的盲注SQL問題。 但是我發現即使使用了准備好的語句,我們也遇到了這個問題。
僅使用准備好的語句不能解決綁定SQL注入問題嗎? 在准備好的語句中使用字符串連接會損害所有優勢嗎?
private static final String selectStaement=" select email,phone from tuser where name=? ";
public void execute(String name) throws SQLException {
PreparedStatement preparedStatement = theConnection.prepareStatement(selectStaement + " ORDER by name");
preparedStatement.setString(1, name);
rs = preparedStatement.executeQuery();
}
有人可以讓我知道這段代碼有什么問題以及如何解決嗎? 數據驗證是唯一的方法嗎? 如果我要允許所有字符怎么辦?
從安全的角度來看,您的代碼很好,這是掃描儀報告的錯誤警報(無論是哪種警報)。
您可能應該將掃描儀配置為忽略此類警告。
“如果您不使用用戶輸入作為已准備好的語句的參數,而是通過將字符串連接在一起來構建SQL命令,那么即使使用已准備好的語句,您仍然容易受到SQL注入的攻擊。”
請參閱: PreparedStatement如何避免或阻止SQL注入?
為什么不使用:
private static final String selectStaement=" select email,phone from tuser where name=? ORDER by name";
希望這可以幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.