千锋教育-做有情怀、有良心、有品质的职业教育机构

当前位置:首页  >  IT问答库  >  零基础学软件测试

安全测试入门:OWASP Top 10漏洞扫描实战

发布:cli 2026-05-05 09:02

推荐答案

01 为什么你的API不安全?从OWASP Top 10说起

多个,全球因API安全漏洞造成的损失超过120亿美元。你的代码跑得再快,一个SQL注入就能让数据库裸奔。OWASP Top 10不是理论,是血淋淋的教训。

OWASP(开放Web应用程序安全项目)每3-多个更新一次Top 10漏洞列表。多个版本中,失效的访问控制跃居第一,加密失效位列第二,注入降至第三。但别被排名骗了——SQL注入依然是最容易利用的漏洞之一。

安全测试不是安全团队的专利。作为测试工程师,你每天写的API用例,稍加改造就能变成安全扫描器。REST Assured这个工具,不仅能测功能,还能测安全。

核心思路: 功能测试验证“能不能用”,安全测试验证“会不会被攻破”。两者共享同一个API测试框架。

> 测试不覆盖安全,等于给黑客留后门。

02 环境搭建:10分钟装好安全测试工具箱

别被“安全测试”吓到。你不需要买昂贵的商业扫描器,一个REST Assured + 几个开源库就够了。

较高 Maven依赖(直接复制)

```xml

io.rest-assured

rest-assured

较高.0

test

com.googlecode.json-simple

json-simple

较高.1

org.testng

testng

较高.0

test

com.google.guava

guava

较高.1-jre

```

较高 基础测试骨架

```java

import io.restassured.RestAssured;

import io.restassured.response.Response;

import org.testng.annotations.BeforeClass;

import org.testng.annotations.Test;

import static org.hamcrest.Matchers.*;

public class SecurityScanBaseTest {

@BeforeClass

public void setup() {

// 配置基础URL

RestAssured.baseURI = "http://localhost:8080/api";

// 设置超时(安全测试不能无限等待)

RestAssured.config = RestAssured.config()

.httpClient(httpClientConfig ->

httpClientConfig.setConnectionTimeout(5000));

}

// 基础功能测试(作为安全测试的基准)

@Test

public void testNormalLogin() {

String loginPayload = "{\"username\":\"admin\",\"password\":\"pass123\"}";

Response response = RestAssured.given()

.contentType("application/json")

.body(loginPayload)

.when()

.post("/login")

.then()

.statusCode(200)

.extract().response();

System.out.println("正常登录响应: " + response.asString());

}

}

```

> 工具不会帮你发现漏洞,但能帮你10倍速验证漏洞。

03 五大高危漏洞扫描实战:代码即武器

较高 SQL注入扫描(OWASP Top 10 #3)

SQL注入是最经典的攻击方式。攻击者在输入中插入SQL代码,让数据库执行恶意命令。

攻击原理: 如果后端拼接SQL语句时未做参数化处理,输入 `admin' OR '1'='1` 会变成:

```sql

SELECT * FROM users WHERE username = 'admin' OR '1'='1'

```

这个查询永远返回真,攻击者直接登录成功。

扫描代码:

```java

@Test

public void testSQLInjection() {

// 常见SQL注入Payload

String[] sqlPayloads = {

"' OR '1'='1",

"'; DROP TABLE users; --",

"' UNION SELECT * FROM admin --",

"admin'--",

"' OR 1=1 --"

};

for (String payload : sqlPayloads) {

String maliciousPayload = String.format(

"{\"username\":\"%s\",\"password\":\"%s\"}",

payload, "anything");

Response response = RestAssured.given()

.contentType("application/json")

.body(maliciousPayload)

.when()

.post("/login")

.then()

.extract().response();

// 安全系统应该返回403或500,而不是200

if (response.getStatusCode() == 200) {

System.out.println("⚠️ 高危:SQL注入成功!Payload: " + payload);

System.out.println("响应: " + response.asString());

} else {

System.out.println("✅ 安全:Payload被拦截: " + payload);

}

}

}

```

判断标准: 任何SQL注入Payload返回200,都是严重漏洞。安全系统必须拦截所有特殊字符。

较高 XSS跨站脚本扫描(OWASP Top 10 #7)

XSS攻击者将恶意脚本注入页面,窃取用户Cookie或重定向到钓鱼网站。

扫描代码:

```java

@Test

public void testXSSVulnerability() {

String[] xssPayloads = {

"",

"",

"javascript:alert('XSS')",

"\">",

""

};

// 测试用户输入字段(如评论、用户名、搜索)

for (String payload : xssPayloads) {

String requestBody = String.format(

"{\"comment\":\"%s\",\"userId\":1}",

payload);

Response response = RestAssured.given()

.contentType("application/json")

.body(requestBody)

.when()

.post("/comments")

.then()

.extract().response();

// 检查响应中是否包含未转义的脚本

String responseBody = response.asString();

if (responseBody.contains("

相关问题

安全测试入门:OWASP Top 10漏洞扫描实战

软件测试培训费用对比:线上vs线下谁更划算

多个从0到自动化测试:我的逆袭路线图,每天只花2小时

北京软件测试培训机构TOP10评测

北京软件测试培训机构评测

JMeter vs LoadRunner:性能测试工具选型,90%的人选错了

测一测
你知道多少IT梗