SQL注入和解决方案

时间:2012-11-17 08:50:53

标签: sql sql-injection

SQL注入和解决方案 会有什么解决方案?

5 个答案:

答案 0 :(得分:2)

你应该做好准备好的SQL语句,而这样做的方式因编程语言而异。关于他可以用SQL注入最坏的情况,他可以转储数据库内容。如何防止它检查以下链接http://www.marcofolio.net/features/how_you_can_prevent_an_sql_injection.html

答案 1 :(得分:1)

我想你最好的方法是尽可能地从你的UI中获取你的SQL语句,总体而言你需要了解SQL注入的发生方式,例如,你有这样的查询:

select name from users where password='ValueFromTxtPassword' --not good approach
攻击者可以在你的TxtPassword字段中写下这个:

0 or 1=1; select * from creditcards --

这有效地产生了这样的有效查询:

select name from users where password=0 or 1=1; ======> valid query is always true
select * from creditcards -- ===> makes another query and ignores the rest of the lines in your SQL statement, giving you all the records from your creditcard table

因此,为避免这种情况,您可以使用

之类的存储过程
 authenticate(username, password) --Stored procedures force you to pass only the needed info

另一个好方法是使用“查询”复杂对象,根据您的需要构建您的sql语句

public class query{
    public List<column> projections {get; set;} //use this to build your SELECT
    public List<condition> filters { get; set;} //use this to build your WHERE
    public List<condition> sorting { get; set;} //use this to build your ORDER BY
}

使用像Hibernate这样的ORM通常会强制您构建此查询复杂对象,因为您无法映射表映射但只能返回域对象。

答案 2 :(得分:0)

这不好。您需要保护SQL查询到客户端请求。如果它太难了,那么最好的方法就是使用框架。例如,如果你熟悉PHP,那么你可以使用Symfony或Zend。

答案 3 :(得分:0)

1)过滤器输入 - 停止相信您的用户:应用程序的最大威胁来自其用户。用户不需要像你期望的那样有礼貌和顺从。有些用户的意图非常糟糕,有些用户只是尝试测试他们的黑客技能。无论您要编写什么代码,请使用最佳实践编写它并考虑它的安全性方面。验证表单中的每个字段

2)使用数据库包装类或PDO - 数据库包装器或PDO(在PHP中)可以降低将输入值直接访问到数据库的风险。 准备好的陈述可以与PDO一起使用,如下所示。

http://www.itechnicalblog.com/what-is-a-sql-injection-and-how-to-fix-it/ enter link description here

答案 4 :(得分:0)

服务器端解决方案是让数据库服务器拒绝意外的SQL查询(其解析树哈希不在一组已知哈希中的查询)。

基本上,这个想法很简单,其他人也有类似的想法。

我的想法略有不同,因为我建议将解析从客户端移动到已经有解析步骤的服务器。

算法:

1)在数据库服务器上,解析SQL之后,遍历解析树并生成一串操作码令牌。计算字符串上的MD5哈希值。

2)然后,此哈希表示解析树的形状。对于Web应用程序,唯一SQL查询的数量将相当小。

3)数据库服务器保留每个用户的有效哈希列表,并在新哈希值上发出警告/失败。

4)向API添加一个函数以预先加载此哈希列表,并在Web应用程序启动时使用已知哈希列表调用此函数。

SQL注入的工作方式是插入字符,从而产生与程序员设想的不同的解析树。

解析树哈希可以检测到意外的解析树。

该提案的缺点是没有当前的数据库系统。到目前为止我最接近的是Postgresql,它在pg_stat中保存了解析树的哈希值以供参考。