sql注入 substr
时间: 2023-11-20 12:49:46 浏览: 42
SQL注入是一种常见的网络攻击方式,其中之一就是使用substr函数来获取敏感信息。substr函数用于从字符串中提取子字符串,攻击者可以通过构造恶意输入,使得substr函数返回的结果包含敏感信息。例如,在一个登录页面中,如果用户名和密码的验证是通过以下SQL语句实现的:
```
SELECT * FROM users WHERE username = '$username' AND password = '$password'
```
攻击者可以在用户名输入框中输入以下内容:
```
' or 1=1 union select 1,2,3,substr(password,1,1) from users where username='admin' --
```
这个输入会导致SQL语句变成以下形式:
```
SELECT * FROM users WHERE username = '' or 1=1 union select 1,2,3,substr(password,1,1) from users where username='admin' --' AND password = ''
```
这个SQL语句会返回一个包含密码第一位字符的结果集,攻击者可以通过不断修改substr函数的参数,逐位获取密码。
为了防止SQL注入攻击,应该使用参数化查询或者预编译语句来代替字符串拼接的方式构造SQL语句。
相关问题
java 防sql注入的正则表达式
以下是两个Java防止SQL注入的正则表达式:
1. 引用中的正则表达式:
```java
private static String reg = "(?:')|(?:--)|(/\\*(?:.|[\\n\\r])*?\\*/)|" + "(\\b(select|update|union|and|or|delete|insert|trancate|char|into|substr|ascii|declare|exec|count|master|into|drop|execute)\\b)";
private static Pattern sqlPattern = Pattern.compile(reg, Pattern.CASE_INSENSITIVE);
private boolean isValid(String str) {
if (sqlPattern.matcher(str).find()) {
logger.error("未能通过过滤器:str=" + str);
return false;
}
return true;
}
```
2. 引用中的正则表达式:
```java
public static boolean containsSqlInjection(Object obj){
Pattern pattern= Pattern.compile("\\b(and|exec|insert|select|drop|grant|alter|delete|update|count|chr|mid|master|truncate|char|declare|or)\\b|(\\*|;|\\+|'|%)");
Matcher matcher=pattern.matcher(obj.toString());
return matcher.find();
}
```
sql-lab 靶场配置
sql-lab靶场是一个用于学习和测试SQL注入的在线平台。通过访问URL链接,你可以使用不同的SQL注入语句来测试并学习如何防范SQL注入攻击。其中,通过使用left、substr、extractvalue等函数,你可以提取数据库的表名和列名等信息。通过查找information_schema.tables表来获取库名,再通过查找information_schema.columns表来获取列名。请注意,在实际情况下,这些操作是违法的,只能在合法授权的环境中使用。