0

如果我有一个开放的表单,有人可以将任何 sql 语句输入到我的 sql server 进行内部测试,并且我在执行之前从语句中删除了以下关键字,那么有人执行突变是否仍然危险?

INSERT, DELETE, DROP, UPDATE, CREATE, ALTER, TRUNCATE, EXEC

将运行这些操作的 sql 帐户具有读/写权限。

4

3 回答 3

0

如果攻击者仅对单个表具有只读权限,并且他们可以欺骗您的应用程序执行任意 SQL,那么他们可以通过运行笛卡尔积来实施至少一次拒绝服务攻击:

SELECT * 
FROM table, table, table, table, table, table, table, table, table, table
ORDER BY RAND();

如果表有 100 行,你的 sql server 可以处理排序 100 10行而不会崩溃吗?:-)

结论是限制 SQL 权限可以成为解决方案的一部分,但它不是保护自己免受攻击者的完整解决方案。你需要知道如何使用多种技术,以及如何防御性地编写代码。

我在演讲中介绍了不同的防御技术以及哪些技术在不同情况下有用: SQL 注入神话和谬误

于 2012-11-22T21:57:20.503 回答
0

是的 - 可以使用 SELECT INTO,也许还有其他。

http://www.w3schools.com/sql/sql_select_into.asp

最好正确使用用户帐户可用的权限。创建一个具有只读权限的帐户,所有主流服务器都会允许您这样做。

于 2012-11-22T16:22:01.623 回答
0

如果您无法更改权限,那么您可以将 select 语句包装到CREATE VIEW AS然后运行视图中吗?如果运行 select 以外的任何内容,这应该(取决于您的环境)错误。

于 2012-11-22T16:37:36.487 回答