【发布时间】:2011-05-25 15:40:49
【问题描述】:
我试图对系统的登录单元进行压力测试。我的系统是这样设计的——
如果用户输入用户 ID - abcd 和密码传递,那么服务器将获取这些参数并准备一个 sql 命令并将其触发到 microsoft 数据库 -
select password from UserInformationTable where userid = 'abcd';
将返回的值与给定的密码传递进行比较,然后将结果发送给客户端。
我使用以下方法成功闯入系统-
用户输入用户 ID - <abcd1 or drop table UserInformationTable >。这行得通,我的完整 UserInformationTable 被删除了。
是否有任何优雅的方式来处理这样的黑客问题。一种方法是检测用户 ID 中的“或”子字符串,但我觉得这不是很优雅。有什么办法可以限制没有。 microsoft sql 语句中的查询?
感谢和问候, 拉兹
【问题讨论】:
-
您实际上是在使用参数还是只是连接查询的字符串?另外,这是 MySQL 还是 SQL Server,您使用的是什么语言?
-
阅读 SQL 注入。然后阅读为什么存储任何类型的明文密码都是不好的。然后阅读今天的 CodingHorror.com,了解如何利用第三方进行身份验证是一个不错的选择。
-
你必须使用 SqlParameters helplink
标签: sql sql-server sql-injection