PHP / Kohana:保护搜索查询

时间:2012-02-14 13:56:41

标签: php kohana

我希望允许用户执行搜索而不限制任何角色。

是否足以“添加斜杠”以及/mysql_escape_chars以保护数据库免受攻击?

你还有什么建议?

非常感谢。

P.S。 URI路由 - > www.example.com/search/category/query其中query是要搜索的字词。

4 个答案:

答案 0 :(得分:2)

如果直接通过查询,推荐的解决方案是对参数使用mysql_real_escape_string - 尽管这确实需要您首先打开数据库连接。通过在转义时考虑数据库的字符编码,这对于避免使用某些编码逃避中间字符很重要。此外,不推荐使用mysql_escape_string

但是,如果可能,建议您改为使用mysqli库的prepared statements功能;这使您可以将查询参数作为参数传递给PHP方法,因此几乎可以保证您不会搞砸,同时无需执行转义。

假设您使用的是Kohana的内置数据库工具,您还可以使用its prepared statement support or query builder,它也支持准备好的查询,也不需要转义。

答案 1 :(得分:2)

使用Kohana ORM / Query Builder - 它们将保护您免受SQL注入。您需要注意的唯一情况是使用DB::expr,这不会逃避您的变量。阅读official docs中的更多内容。

答案 2 :(得分:0)

是的,这样的保护足够好(如果你要从textarea插入数据,几乎相同,即。),但我会使用mysql_real_escape_string。并且不要忘记在mysql查询中添加搜索字符串(... WHERE somecolumn LIKE 'query'而不是... WHERE somecolumn LIKE query,同样适用于FULLTEXT次搜索)

请确保在url查询参数中对url_encode或base64_encode进行查询

答案 3 :(得分:-2)

这个问题对我来说没什么意义。

  1. 为什么只搜索您的搜索?采用参数的动态SQL查询是我们每个应用程序的基石。应该有一个通用规则(或一组规则),涵盖动态SQL的每一个案例,而不仅仅是一个。

  2. Kohana当然拥有自己运行SQL的工具。为什么要使用原始的“添加斜杠”/ mysql_escape_chars呢?

  3. www.example.com/search/category/query将需要不必要的重定向。为什么不使用常规/search?cat=category&q=query?谷歌似乎并不认为使用这些网址进行搜索是一种耻辱 - 你为什么要这样做?