使用safemysql类来阻止SQL注入是一个好主意吗?

时间:2013-05-09 10:36:30

标签: php class sql-injection

我想知道是否有人对此脚本/ safemysql有所了解? (该脚本的开发者除外)

它被宣布为mysql查询最安全的方法,并防止网站被SQL注入..我真的很喜欢你使用它的方式。

但它真的“安全”吗?好的代码吗? ...那么关闭在这个脚本中没有发生的mysql连接..是不是必要?

很乐意和你讨论这个问题!

2 个答案:

答案 0 :(得分:6)

尽管有这个名字,但我认为安全性并不是班级的关键。不要误解我,我并不是说它不安全。它实际上具有其他库通常不具备的安全功能,例如标识符的占位符。

我的意思是如果使用得当,内置扩展程序足够安全且典型的广告素材用户可以像使用任何其他库一样轻松地跳过占位符:

$foo = $db->getAll("select * from foo where foo_id={$_POST[foo_id]}");

这个类与其他替代方案的不同之处在于:

  1. 它提供了一种方便的语法来组合来自非标量数据类型的SQL查询,例如:阵列。
  2. 它提供了一个内置功能来组成INSERT查询。
  3. 它提供了内置值过滤器(“白名单”)。
  4. ...它并没有像大多数fraweworks那样强迫你使用SQL语言的糟糕克隆(毕竟它是一个帮助者,而不是一个框架,并为此感到自豪)。

    数据类型占位符很奇怪(为什么我需要为单个值设置?i / ?s但不为数组设置?)并且作者因对命名参数的仇恨而闻名(所以你不会在这里找到它们。但该项目并未声称已完成。

    总结一下:如果您喜欢语法糖,请使用它,而不仅仅是为了安全。如果有什么东西坏了,它就是一个637行的文件 - 你可以自己解决它:)

答案 1 :(得分:3)

这个想法当然很棒 事实上,这个类比其他广泛宣传的解决方案更安全,比如原始PDO,不仅为极其有限的文字集提供占位符,而且对于一切,可以进行查询。

有了这个,它使应用程序代码大大缩短,使开发人员免于手动数据格式化。

唯一可能的缺点是

  • 必须谨慎使用的?p占位符。
  • 将带有空数组的占位符放入NOT IN(?a)语句
  • 在处理?u和?n占位符时,必须始终牢记白名单功能。尽管如此,一切都在例子中。

当然,您可以轻松扩展它,添加您需要的功能,例如关闭连接和内容。这就是OOP的原因。