web攻击总结

举报
object 发表于 2025/01/03 10:04:34 2025/01/03
【摘要】 由于会经常浏览一些安全的帖子,觉得有用的就会收藏起来,时间久了,收藏的网页越来越多,浏览起来特别方便,于是想了想,觉得还是基于自己的理解以及其他人的经验,尽量总结到一块,也方便自己做归纳总结,对于同一类的问题,也能及时发现。本次主要总结的内容为web攻击相关的知识。一、XSS注入基本介绍可在浏览器侧执行某些特定的攻击代码片段。本质是js代码执行。例如获取cookie并发送到自己的网站(跨站)...

由于会经常浏览一些安全的帖子,觉得有用的就会收藏起来,时间久了,收藏的网页越来越多,浏览起来特别方便,于是想了想,觉得还是基于自己的理解以及其他人的经验,尽量总结到一块,也方便自己做归纳总结,对于同一类的问题,也能及时发现。本次主要总结的内容为web攻击相关的知识。


一、XSS注入

基本介绍

可在浏览器侧执行某些特定的攻击代码片段。本质是js代码执行。例如获取cookie并发送到自己的网站(跨站),故也称跨站脚本攻击。可分为反射型、持久型、DOM型。

反射型:不存储代码片段,常见如直接出现在URL中。一般只影响访问这个URL的用户

持久型:需要存储在特定地方,常见如数据库,cookie,redis等。一般会影响所有能访问这个存储资源的用户。

DOM型:针对用户输入来动态构建页面的DOM节点。(它也可能是反射型,也可能是持久型),所以影响面不确定。


常见的攻击标签

#a标签
#herf属性
<a href="javascript:confirm('a')" >1</a>
#onmouseover标签
<a onmouseover="javascript:alert('a_onmouseover')">12</a>

#img、video、audio、svg、body标签
#onerror、onload属性
<img src="#" onclick="javascript:alert('img:onclick')" onerror="javascript:alert('img:onerror')" onload="javascript:alert('img:onload')" /> 

#iframe标签
#src属性
<iframe src="javascript:alert('iframe')" width= "0" height= "0"/>

#form标签
#action标签
<form action="Javascript:alert('from_action0')" />

#input标签
#formaction标签
<input type="submit" formaction="JaVaScript:alert('from_action2')"/>


常见的注入点

  1. 富文本框

常见解决方案

1.输入校验 2.输出转码 3.前端过滤


二、CRLF注入

CR回车、LF换行。主要针对注入回车换行符,导致系统或者页面呈现完全不一样的效果,成为CRLF注入,换行符注入。

日志注入

日志注入是比较常见的CRLF注入,通过注入回车换行符,达到注入一条新的日志,从而达到日志伪造的目的。

举例说明:其中红线框起来的就是注入点,其中userName受用户控制,下面其他的日志,都是用户构造,通过注入换行符,看起来就像是一条正常的日志

HTTP响应头CRLF注入

// todo待补充相关知识


防御措施

一般分为:

  1.手动过滤特殊字符。

  2.使用日志框架的能力进行过滤

Log4j安全配置-日志注入

换行符

操作系统 文件换行符
Windows     \r\n
Linux     \n
Mac      \r\n


三、SQL注入(mysql)

这里主要针对mysql类似的数据库,主要针对sql拼接字符的情况。

SQL注入主要指的是,用户可控制执行的SQL,达到执行预期以外的SQL命令,即SQL注入。

会造成SQL注入,主要分成两种情况:

  1. 手动拼接SQL
  2. 未使用预编译

手动拼接SQL

// 以下代码,若tableName、username、password能够受到用户控制,则会导致SQL注入
String tableName = "users";
String username = "John";
String password = "password";
// 拼接sql
String sql = "insert into " + tableName + " (username,password) values('"+username+"','" +password + "')";
Connection connection = DatabaseConnector.getConnection();
Statement statment = connection.createStatement();
statement.executeUpdate(sql);

// 例如SQL中,拼接字符。就会导致 用户表插入了一条新的admin用户,达到了注入的目的。
tableName = "users (username,password) values('admin','123456') --";

未使用预编译

我们实际开发过程中,很少拼接SQL,更多的是使用mybatis进行开发,其中就涉及到预编译。

mybatis.xml中一般有两种占位符 #{} 和 ${}。

#{}预编译

拼接字符时,会将整个占位符按照一整块处理,默认是字符串类型,则不会导致SQL的结构进行改变。

${}静态拼接

拼接字符时,会直接使用字符拼接的方式进行拼接,跟手动拼接一模一样。


SQL防御措施

这个比较简单。

  1. 无脑使用#{}
  2. 非得使用拼接SQL的情况。使用白名单限制字符
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。