应用安全系列之十:CSV注入

 本系列文章主旨在于介绍一些漏洞类型产生的基本原理,探索最基础的解决问题的措施,不排除有些语言或者系统提供的安全的API可以更好地更直接地解决问题,也不排除可以严格地输入验证来解决。

关于CSV注入,可能平时关注的人比较少,不过,只要有以csv文件格式导出数据,它就可能存在。很多系统都会导出csv,将数据用于分析。

首先介绍一下CSV的含义,CSV就是 comma-separated-values,就是使用逗号分开的一串值,当使用excel打开时,逗号隔开的内容会被展开为对应行和列的一个cell的值。

例如:下面是一个含有三行内容的csv文件

使用Excel打开,会显示为:

当CSV的内容添加了注册日期,修改为一下内容是:

使用Excel打开,

=TODAY() 没有被显示,而是显示计算出来的一串数值,说明注入的函数被执行。也可以注入去执行一些命令,例如:当输入的内容是:=calc|a!z,打开CSV文件,就会显示如下对话框,

同样如果在CSV中通过函数注入LINK,如下:

使用EXCEL打开此文件,显示如下:

Click Me 一栏里,会显示一个连接,使用鼠标点击,就会提示框选择使用什么应用程序打开。由于是从公司的网站导出的数据,所以,用户一般都会信任此CSV,也就会点解确定按钮去访问。

通过以上几个例子可以看出,在导出CSV时,如果导出的内容中有特殊字符,可能会注入一些命令或者链接等。

CSV注入:也称为公式注入,是在将内容已csv的方式导出到一个文件时,由于特殊字符经过任何处理,直接输出到csv文件导致的注入,可以导致执行任意命令。由于使用者从系统导出数据,他是信任这个文件的,所以,当他打开这个导出的文件时,就不会怀疑会有什么恶意的内容或者操作,即使有时弹出警告框,使用者也会直接点击确定继续,导致CSV很容易被利用。

最根本导致CSV注入的是一些特殊字符有特殊的含义,例如 以+, -, =, @ 以及"等开头的字符串。 

如果需要输入一个公式到CSV中,需要注意了,在上例子中有:=SUM(1,2),计算两个数值之和,也可能需要计算两列之和,例如:=SUM(A1,B1),这时,急需要将此公式使用双引号括起来,如:“=SUM(A1,B1)”。由此,有会引起另外一个问题就是,如果我的字符串中又含有" 该怎么处理?  (是不是感觉上了连环套的计谋), 此时,双引号的转义方式是使用两个双引号(是否似曾相识的感觉?对了,此处和Windows命令行注入章节的双引号转义一样),例如:AAAA"BBBB转义之后为AAAA""BBBB。

如果字符串中是以 +, -, =, @ 开头等字符该如何处理呢?

在服务器端输出的时候,可以考虑在输出时,在字符串前面加一个单引号(')或者空格字符,例如输出的内容就是=SUM(1,2), 输出到CSV时把内容改为“ =SUM(1,2)”,就可以显示为=SUM(1,2),不过,前面多了一个空格。

不管是添加单引号也好,还是添加一个空格也好,都会修改了CELL中的值,会影响数据的完整性。这个需要在使用的地方进行反向处理,去掉开头的空格或者单引号。

如果有的字符已经以单引号或者空格开头了,该如何处理? 答案是:统一处理,即使已经有了,还需要再添加一个,这样在使用的地方才能知道开头的字符是后来添加的还是原本字符串本身的。

在下面的表格列出了对CSV注入的特殊字符处理:

漏洞类型特殊字符处理方式例子
CSV注入 以 +  - =  @ 开头使用双引号括起来 例如 =SUM(1,2) -> "=SUM(1,2)"
,逗号使用双引号括起来例如:a,b  ->  "a,b"
 "  双引号使用两个双引号代替" -> ""

如果有不妥之处,希望可以留言指出。谢谢!

参考:

What is CSV Injection (Formula Injection) ?

How To Prevent CSV Injection

Formula Injection - Pentestmag

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
### 回答1: 成语数据filetype:csv是一个搜索命令,用于在搜索引擎中找到以csv格式存储的成语数据文件。CSV全称为Comma-Separated Values,即逗号分隔值,是一种常用的电子表格数据存储格式。 成语数据filetype:csv的搜索命令可以帮助用户快速找到符合要求的成语数据文件。在搜索引擎中输入此命令后,搜索引擎会根据关键词"成语数据"和文件格式"csv"进行匹配搜索,列出符合这些条件的文件结果。 CSV格式的成语数据文件通常以逗号分隔每个数据项,每一行代表一个成语,不同的字段包括成语本身、拼音、解释等信息。CSV格式易于编辑和处理,也易于其他软件之间的数据交换。 利用成语数据filetype:csv命令,我们可以获取到csv格式的成语数据文件,进而可以进行数据分析、统计、筛选和整理等操作。我们可以通过打开这些数据文件,利用电子表格软件如Excel,或编程语言如Python进行数据读取和处理,以满足我们对成语数据的各种需求。 总之,成语数据filetype:csv是一个方便快捷的搜索命令,用于找到以csv格式存储的成语数据文件,可以帮助我们更好地获取和处理成语数据。 ### 回答2: 成语数据filetype:csv是一个搜索指令,用于在互联网上寻找以CSV格式存储的成语数据。 CSV(Comma-Separated Values)是一种常见的文件格式,通常用于存储表格数据。CSV文件使用逗号作为字段之间的分隔符,每一行表示一条记录,每一列表示一个字段。因此,使用filetype:csv指令可以筛选出以CSV格式存储的文件。 在搜索成语数据时,使用成语数据filetype:csv指令可以更加精确地找到以CSV格式存储的成语数据文件。通过下载或打开这些文件,我们可以获得包含大量成语的表格数据,方便进行后续的分析、整理或利用。 使用这个指令可以帮助我们快速找到满足需求的成语数据来源,提高搜索成果的准确性和有效性。但需要注意的是,搜索结果可能因为文件的来源和内容的不确定性而存在质量和准确性的差异,所以在使用时还需要根据实际情况进行筛选和验证。 ### 回答3: 成语数据filetype:csv是指在搜索引擎中使用特定的搜索语法找到关于成语数据的CSV文件。CSV是一种常见的文件格式,用于存储结构化数据,其数据以逗号分隔,每行代表一个记录,每列代表一个属性。 成语是汉语中独特的语言现象,是具有固定格式,意义独特的词组,可以用来表达某种具体含义或抽象概念。成语数据的CSV文件可能包含成语的拼音、含义、出处、用法等详细信息。通过这些数据,我们可以了解到成语的来源、应用场景以及丰富的文化内涵。 在分析成语数据的CSV文件时,我们可以使用各种数据处理工具和技术进行数据清洗、转换和分析。例如,我们可以使用Python编程语言中的pandas库来读取CSV文件,并对数据进行筛选、排序、聚合等操作。我们还可以使用数据可视化工具如Matplotlib或Seaborn将数据以图表形式展示出来,以便更好地理解成语数据之间的关系和规律。 通过成语数据的CSV文件,我们可以探索成语在不同语境下的使用情况,研究成语的演变和变异过程,也可以将成语数据与其他语言资源进行关联,进行跨语言的研究。此外,成语数据的CSV文件还可以为教育、文化等领域提供基础数据,用来开发成语学习应用程序、编写教材等。 总之,成语数据的CSV文件提供了一个方便且结构化的方式来存储和处理成语数据,帮助我们更好地理解和利用成语这一重要的语言资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jimmyleeee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值