3

我想知道是否有人对这个脚本/类safemysql有经验?(除了这个脚本的开发者)

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

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

很想和你讨论这个!

4

2 回答 2

6

尽管有这个名字,但我认为安全性并不是课程的重点。不要误解我的意思,我并不是说它不安全。它实际上具有其他库通常没有的安全功能,例如标识符的占位符。

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

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

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

  1. 它提供了一种方便的语法来组合来自非标量数据类型(例如数组)的 SQL 查询。
  2. 它提供了一个内置功能来编写 INSERT 查询。
  3. 它提供了一个内置的值过滤器(“白名单”)。

...并且它不会像大多数框架那样强迫您使用 SQL 语言的拙劣克隆(毕竟它是一个助手,而不是一个框架,并以此为荣)。

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

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

于 2013-05-09T12:05:17.183 回答
3

当然这个想法很棒。
事实上,这个类比其他广为宣传的解决方案(如原始 PDO)更安全,它不仅为极其有限的文字集提供占位符,还为可以查询的所有内容提供占位符。

有了它,它可以大大缩短应用程序代码,使开发人员从手动数据格式化中解脱出来。

唯一可能的缺点是

  • 必须谨慎使用的 ?p 占位符。
  • ?a 带有空数组的占位符放入NOT IN(?a)语句
  • 在处理 ?u 和 ?n 占位符时,必须始终牢记白名单功能。不过,所有内容都包含在示例中。

当然,您可以轻松扩展它,添加您个人需要的功能,例如关闭连接等。这正是 OOP 的用途。

于 2013-05-09T10:46:18.433 回答