Update 攻击技术.md

预处理语句示例的字段名与上文一致,补充用反斜线转义单引号,更新 PHP Magic Quotes 的说明。
This commit is contained in:
CyC2018
2026-10-28 13:35:20 +08:00
parent 21df2f5030
commit 37d8527f17
+4 -4
View File
@@ -188,9 +188,9 @@ strSQL = "SELECT * FROM users;"
Java 中的 PreparedStatement 是预先编译的 SQL 语句,可以传入适当参数并且多次执行。SQL 语句的结构在预编译时已经确定,传入的参数只会被当作数据,因此可以防止 SQL 注入的发生。
```java
PreparedStatement stmt = connection.prepareStatement("SELECT * FROM users WHERE userid=? AND password=?");
stmt.setString(1, userid);
stmt.setString(2, password);
PreparedStatement stmt = connection.prepareStatement("SELECT * FROM users WHERE name = ? AND pw = ?");
stmt.setString(1, name);
stmt.setString(2, pw);
ResultSet rs = stmt.executeQuery();
```
@@ -204,7 +204,7 @@ Query SELECT * FROM users WHERE name = '1'' OR ''1''=''1' AND pw = '1'' OR ''
#### 2. 单引号转换
将传入的参数中的单引号转换为连续两个单引号。PHP 的 Magic Quotes 曾经自动完成这个功能,但是因为不可靠已经被移除,应该使用数据库驱动提供的转义函数,并且只在无法使用参数化查询时使用。
将传入的参数中的单引号转换为连续两个单引号,或者在单引号前加反斜线(MySQL 默认两种都支持)。PHP 的 Magic Quotes 曾经自动给单引号等字符加反斜线,但是因为不可靠,已经在 PHP 5.4 中移除,应该使用数据库驱动提供的转义函数,并且只在无法使用参数化查询时使用。
#### 3. 最小权限