android - 安全的用户输入

标签 android sql xml sql-injection

我已经阅读了很多关于转义字符和清理用户输入的论坛(和堆栈溢出)帖子,但我想将它们结合在一起并使其更适合 Android 平台。这是我的情况:

我有一个 Android 应用程序,它通过 SOAP XML 消息与 Web 服务进行通信。下面是一个可能发送的示例 XML 消息(我省略了它周围的 SOAP 信封):

<Log>
    <Summary>user entered text</Summary>
    <Details>user entered text</Details>
</Log>

如您所见,用户可以在 2 个地方输入表单中的文本,然后将其插入到要发送到 Web 服务的消息中。我需要:
A) 确保它是有效的 XML 和
B) 确保它不包含任何恶意 SQL 内容。

Android API 中是否有任何预先包含的实用程序来转义用户可能输入的无效 XML 字符(例如 &)? (这样我就可以简单地说“escapeXML(xmlstring);”或类似的东西)

是否有任何方法可以检查恶意 SQL(或其他代码注入(inject)),还是应该在服务器端处理?

作为旁注:我几乎更希望用户只能输入 A-z、0-9 和基本标点符号(以避免有时甚至无法看到或解释的奇怪的 unicode 字符)。有没有一种好方法可以将用户输入限制为字符子集?

我知道这是一个内置的几个问题,所以如果您只知道其中的一部分,请无论如何提供一个答案,我将非常乐意投票或接受它。在此先感谢您的所有帮助! (StackOverflow 是当我消耗了太多的论坛线程并且让自己对什么是适合我的情况感到困惑的时候来的地方)

最佳答案

最好的处理方式SQL Injection正在使用参数化查询。这是在服务器端完成的。其他一切都是次要的、不必要的或仅触及问题的表面。

你应该阅读这些:

在 Jeff Atwood 的博客上,我喜欢他说的地方:

Non-parameterized SQL is the GoTo statement of database programming.

关于android - 安全的用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7918830/

相关文章:

Android xml 错误 : "No resource found that matches the given name" with RelativeLayout (@id/LinearLayout_acc, @id/ProgressBar_statusScreen)

jquery - 如何在 Android 中使用 PhoneGap 和 jQuery 调用基于 SOAP 的 Web 服务?

java - SharedPreferences 是否合适,或者有更好的选择吗?

android - TLS - Node.js 服务器到 Android 应用程序

sql - 带有 CLOB 的 SYS_CONNECT_BY_PATH

mysql - 返回 MySQL 联合查询的附加列值

ruby - 用 ruby​​ 解析 XSD

xml - 如何获取 XML 根元素及其属性,但没有内容

Android、Azure Devops 在运行管道时出错 ##[error]Error : The process '/Users/runner/work/1/s/gradlew' failed with exit code 1

sql - 如何使用 Groovy StreamingJsonBuilder 将 SQL 结果流式传输到 JSON?