在我的应用程序中,我使用了一个XML Web服务,它允许我根据WHERE
子句查询数据。我想实现搜索功能,用户输入应该进入WHERE
子句。该请求是这样的:如何在没有PreparedStatements的情况下避免SQL注入
<Query>
<Selection>
<sqlwhere>
id IN (
SELECT something
FROM some_table
WHERE something_different LIKE '%<user input>%'
ESCAPE '\'
)
</sqlwhere>
</Selection>
</Query>
服务包装此部分为实际的SELECT
声明。该服务可能使用Firebird或MS SQL Server数据库。
我该如何轻松地逃避用户输入?足以逃避撇号吗?
更新
也许我是有点不清楚。上面的部分发送给服务,服务以XML格式发送匹配的数据。我是而不是服务维护者。这意味着我不知道底层数据库,因此无法连接到它来准备语句。
由于性能问题,我也无法获取所有数据并在我的代码中对其进行过滤。这是我可以有效地与之交谈的唯一方式。
为什么人们仍然试图想出自己的方式来防止sql注入?坚持基于参数的查询标准。 – Takarii
@Takarii你甚至读过这个问题吗? – stevecross
我做过了,但我仍不明白为什么要这样做。如果输入没有被消毒,那么它仍然存在风险 – Takarii