1

当使用 php 和 mysql 在网络上使用数据库进行编码时,您必须在将数据插入数据库之前对其进行清理,以确保有人不会转义引号等。这在 Android 和 MySQLite 中是否有必要?会自动消毒吗?或者只是没有必要?

4

2 回答 2

5

1) 是的,无论平台如何,您都需要清理来自不受信任来源的任何输入(来自用户、另一个系统、另一个应用程序等 - 任何未硬编码到您的应用程序中的内容)。

2) 是的,您需要在访问 SQLite 数据库时在 Android 中执行此操作(直接或通过内容提供程序)。

3) 在将输入用于数据库的 SQL 命令之前对其进行清理是必要的,但它不能阻止所有形式的 SQL 注入。防止这种情况的最佳策略是使用参数化查询,它允许数据库区分什么是数据和什么是命令,所以即使错误的输入潜入并且 SQL 命令出现在数据中,数据库知道将它们视为数据。在标准 Java 编码中,这涉及到 PreparedStatements 的使用。在 SQLite/Android 中,您需要使用compileStatement为数据创建带有占位符的查询(源自不受信任的输入),并用于bindString设置这些占位符。

在优秀的OWASP SQL Injection writeup中有更多关于这个的信息。

于 2012-02-28T13:20:35.260 回答
1

这在这里和其他任何地方一样适用,包括互联网。

您必须非常小心的一件事是您对内容提供商的输入。人们通常会编写内容提供程序,然后使用它们来允许其他人与他们的应用程序交互。然而,通常在幕后,ContentProvider 充当数据库的接口。这是您绝对需要小心的地方,特别是如果您允许手机上的其他应用程序访问您的应用程序内容提供程序。

是的,在用户可能输入数据的任何其他地方,您也需要小心。这包括可编辑的文本字段、从 Internet 下载的内容,基本上是您无法信任的任何内容。

有一个进行污染分析的项目,TaintDroid,但它仅作为系统形式存在(即,它基于运行时修改工作,并非在所有系统上都可用)。但是,目前还有一些研究项目正在进行,旨在跟踪哪些数据流向何处,这可以帮助您防止这个问题。(Scandroid [1] 是少数几个之一。)

[1] SCanDroid:Android应用程序的自动化安全认证,www.cs.umd.edu/~avik/papers/scandroidascaa.pdf

于 2012-02-28T04:48:34.110 回答