![](/img/trans.png)
[英]Ways to prevent SQL Injection Attack & XSS in Java Web Application
[英]SQL injection Attack in Java
我正在尝试使用 java 代码实现其中一种场景。 我正在编写一些糟糕的代码来通过声纳分析它。
我试图从https://rules.sonarsource.com/java/tag/SonarSecurity/RSPEC-3649测试“SQL 查询不应受到注入攻击”。 下面是我试图分析的代码,
package group;
import java.util.*;
import java.io.PrintStream;
import java.nio.file.*;
import javax.naming.directory.*;
import javax.naming.ldap.*;
import javax.naming.*;
public class SonarDemo {
public static void main(String[] args) {
PrintStream o = System.out; //NOSONAR
String pass = args[0];//request.getParameter("pass");
String user = args[1];
String query = "SELECT * FROM users WHERE user = '" + user + "' AND pass = '" + pass + "'"; // Unsafe
Properties connectionProps = new Properties();
connectionProps.put("user", user);
connectionProps.put("password", pass);
java.sql.Connection connection = null;
try {
connection = java.sql.DriverManager.getConnection("jdbc:localhost:sql1;create=true",connectionProps);
java.sql.Statement statement = connection.createStatement();
java.sql.ResultSet resultSet = statement.executeQuery(query);
Files.exists(Paths.get("/home/", user));
String filter = "(&(uid=" + user + ")(userPassword=" + pass + "))"; // Unsafe
LdapContext ctx = new InitialLdapContext();
NamingEnumeration<SearchResult> results = ctx.search("ou=system", filter, new SearchControls());
} catch (Exception e){
o.println("Exception");
}
}
}
但是代码中存在一些问题,其中 sonarqube 无法获取此代码并显示注入攻击存在问题。
如何修改此代码以创建一些 SQL 注入攻击,以便我的 sonarqube 能够在仪表板上显示此错误?
简而言之-修改上面的代码以创建这里提到的注入攻击https://rules.sonarsource.com/java/tag/SonarSecurity/RSPEC-3649
用户提供的数据(例如 URL 参数)应始终被视为不受信任和受污染。
AFAIK 运行时参数不被识别为来自用户的输入。 要重现该问题,请尝试获取用户并从请求的 URL 参数中传递。
public boolean authenticate(javax.servlet.http.HttpServletRequest request, java.sql.Connection connection) throws SQLException {
String user = request.getParameter("user");
String pass = request.getParameter("pass");
}
在这个特定的行中
String query = "SELECT * FROM users WHERE user = '" + user + "' AND pass = '" + pass + "'"; // Unsafe
而不是使用+
来连接字符串,使用StringBuilder
及其 append 方法来连接字符串,这将避免 SQL 注入攻击。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.