一、网络安全角度:漏洞利用方式
1. SQL注入漏洞利用
-
原理:攻击者通过构造恶意SQL语句,插入到应用程序的输入参数中,改变原有SQL语句的逻辑,从而执行非授权的数据库操作。
-
利用方式:
-
信息泄露:通过union select、information_schema等获取数据库名、表名、字段名及敏感数据(如用户账号、密码)。
-
数据篡改:通过update、delete等语句修改或删除数据库数据。
-
权限提升:利用数据库高权限账号(如MySQL的root)执行系统命令(如into outfile写WebShell)。
-
绕过认证:构造’or ‘1’=’1等万能密码绕过登录验证。
-
盲注:通过布尔盲注(and length(database())=8)或时间盲注(and sleep(5))推断数据库信息。
-
2. XSS漏洞利用
-
原理:攻击者将恶意脚本(如JavaScript)注入到网页中,当用户浏览该页面时,脚本在用户浏览器执行,窃取Cookie、会话信息或执行恶意操作。
-
利用方式:
-
反射型XSS:通过URL参数注入脚本(如http://xxx.com/search?keyword=<script>alert(1)</script>),诱导用户点击触发。
-
存储型XSS:将恶意脚本存储到服务器(如论坛帖子、评论),其他用户访问时自动执行。
-
DOM型XSS:通过前端JavaScript操作(如document.write)动态生成恶意内容,无需服务器参与。
-
危害:窃取用户Cookie、会话劫持、钓鱼攻击、传播恶意软件。
-
3. CSRF漏洞利用
-
原理:攻击者诱导用户在已登录目标网站的情况下,访问恶意链接或页面,利用用户的身份(如Cookie)执行非预期操作(如转账、修改密码)。
-
利用方式:
-
GET型CSRF:通过<img src=” http://bank.com/transfer?to=attacker&amount=1000 “>触发转账。
-
POST型CSRF:构造表单或JavaScript自动提交POST请求(如修改邮箱)。
-
危害:以用户身份执行操作(如修改账户信息、发布恶意内容),导致数据泄露或财产损失。
-
4. 序列化漏洞利用
-
原理:攻击者构造恶意序列化数据,当应用程序反序列化该数据时,触发readObject()等方法的危险操作(如执行系统命令)。
-
利用方式:
-
Java反序列化:通过ysoserial生成恶意Payload(如CC链、URLDNS链),触发Runtime.exec()执行命令(如弹计算器、写WebShell)。
-
PHP反序列化:利用unserialize()触发__destruct()、__wakeup()等魔术方法,执行恶意代码。
-
危害:远程代码执行(RCE)、文件写入、内网探测、权限提升。
-
二、开发角度:漏洞防御代码实践
1. 防止SQL注入
-
核心方法:使用参数化查询(预编译),避免字符串拼接SQL。
-
代码示例(Java JDBC):
// 错误方式(字符串拼接)
String sql = "SELECT * FROM user WHERE id = " + userId;
Statement stmt = connection.createStatement();
stmt.executeQuery(sql);
// 正确方式(PreparedStatement)
String sql = "SELECT * FROM user WHERE id = ?";
PreparedStatement pstmt = connection.prepareStatement(sql);
pstmt.setInt(1, userId); // 参数绑定,自动转义
ResultSet rs = pstmt.executeQuery();
-
MyBatis配置:使用#{}占位符(参数化),禁止使用${}(字符串拼接)。
<!-- 正确 -->
<select id="getUser" parameterType="int" resultType="User">
SELECT * FROM user WHERE id = #{id}
</select>
<!-- 错误(可能导致注入) -->
<select id="getUser" parameterType="string" resultType="User">
SELECT * FROM user WHERE name = '${name}'
</select>
2. 防止XSS
-
核心方法:输入验证、输出编码、HttpOnly Cookie。
-
代码示例(Java Servlet):
// 输入过滤(过滤<script>等标签)
String input = request.getParameter("content");
String safeInput = input.replaceAll("<script>", "").replaceAll("</script>", "");
// 输出编码(HTML实体转义)
String unsafeOutput = "<script>alert(1)</script>";
String safeOutput = StringEscapeUtils.escapeHtml4(unsafeOutput); // 使用Apache Commons Lang工具类
response.getWriter().write(safeOutput);
-
前端处理:设置Cookie的HttpOnly属性,防止JavaScript读取。
Cookie cookie = new Cookie("sessionId", "12345");
cookie.setHttpOnly(true); // 关键:防止XSS窃取Cookie
response.addCookie(cookie);
3. 防止CSRF
-
核心方法:CSRF Token验证、SameSite Cookie、Referer检查。
-
代码示例(Spring MVC):
// 生成CSRF Token(Spring Security自动处理)
@Controller
public class FormController {
@PostMapping("/transfer")
public String transfer(@RequestParam("csrfToken") String token, HttpSession session) {
String sessionToken = (String) session.getAttribute("csrfToken");
if (!token.equals(sessionToken)) {
throw new SecurityException("CSRF Token验证失败");
}
// 执行转账逻辑
return "success";
}
}
-
配置SameSite Cookie(Spring Boot):
# application.properties
server.servlet.session.cookie.same-site=strict
4. 防止序列化漏洞
-
核心方法:避免反序列化不可信数据,使用安全序列化格式(如JSON),设置白名单。
-
代码示例(Java):
// 禁用JDK序列化,使用JSON(如Jackson)
ObjectMapper mapper = new ObjectMapper();
// 反序列化时仅允许指定类(白名单)
mapper.activateDefaultTyping(
mapper.getPolymorphicTypeValidator(),
ObjectMapper.DefaultTyping.NON_FINAL,
JsonTypeInfo.As.PROPERTY
);
// 反序列化前检查输入来源(仅信任内部数据)
public Object safeDeserialize(byte[] data) {
if (!isInternalSource(data)) { // 自定义验证输入来源
throw new SecurityException("不可信数据");
}
return mapper.readValue(data, Object.class);
}
三、Spring/SpringMVC/MyBatis框架的防护机制
1. Spring框架
-
SQL注入防护:Spring JDBC(JdbcTemplate)默认使用PreparedStatement,通过?占位符绑定参数,避免拼接SQL。
-
XSS防护:Spring提供HtmlUtils.htmlEscape()工具类转义HTML;Spring Security可配置CSP(内容安全策略)头。
-
CSRF防护:Spring Security自动生成CSRF Token(存储在Session或Cookie中),并在表单提交时验证;支持SameSite Cookie配置。
-
序列化防护:Spring默认不鼓励使用JDK序列化,推荐使用JSON(如MappingJackson2HttpMessageConverter),并可通过@JsonTypeInfo限制反序列化类。
2. SpringMVC框架
-
输入验证:通过@Valid注解结合JSR-303(如Hibernate Validator)验证请求参数,防止非法输入。
-
输出编码:视图解析器(如Thymeleaf)自动转义HTML内容(默认开启),避免XSS。
-
CSRF集成:SpringMVC可与Spring Security无缝集成,自动在表单中添加CSRF Token(如<input type=”hidden” name=”_csrf” value=”…”>)。
3. MyBatis框架
-
SQL注入防护:强制使用#{}占位符(参数化查询),${}仅用于表名/列名等静态场景(需严格验证输入)。
-
动态SQL安全:if、choose等动态标签仅拼接SQL片段,参数值仍通过#{}绑定,避免注入。
-
配置限制:MyBatis Generator生成的代码默认使用#{},减少人为拼接风险。
四、开发配置建议
-
SQL注入:
-
强制使用PreparedStatement或MyBatis的#{},禁用Statement和${}。
-
配置数据库连接用户的最小权限(如仅SELECT、INSERT,禁止DROP、EXEC)。
-
启用SQL日志审计,监控异常查询(如大量union select)。
-
-
XSS:
-
前端框架(如React、Vue)默认转义HTML,避免直接使用dangerouslySetInnerHTML(React)或v-html(Vue)。
-
响应头添加Content-Security-Policy(CSP),限制脚本来源(如default-src ‘self’)。
-
配置X-XSS-Protection: 1; mode=block启用浏览器XSS过滤。
-
-
CSRF:
-
所有修改操作(POST、PUT、DELETE)强制使用CSRF Token验证。
-
关键操作(如支付、修改密码)增加二次验证(短信验证码、密码确认)。
-
避免使用GET请求执行敏感操作(如转账)。
-
-
序列化漏洞:
-
禁用ObjectInputStream反序列化不可信数据,优先使用JSON(如Jackson、Gson)。
-
配置Redis等缓存使用GenericJackson2JsonRedisSerializer而非JdkSerializationRedisSerializer。
-
对RMI、JNDI等远程调用限制访问来源,避免恶意对象注入。
-
-
框架配置:
-
Spring Boot:启用@EnableWebSecurity配置CSRF、CSP、HttpOnly等安全头。
-
MyBatis:在mybatis-config.xml中禁用自动映射(autoMappingBehavior=NONE),减少意外暴露字段。
-
定期更新框架版本,修复已知漏洞(如Spring Security的CSRF绕过、MyBatis的${}注入)。
-
-
通过以上措施,可从开发和框架层面系统性降低SQL注入、XSS、CSRF、序列化漏洞的风险。
© 版权声明
1、本网站名称:
X黑手网
2、本站永久网址:https://www.xheishou.com
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
2、本站永久网址:https://www.xheishou.com
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
THE END















暂无评论内容