PHP/Kohana:保护搜索查询


PHP / Kohana: Protecting search query

我希望允许用户在不限制任何字符的情况下执行搜索。

为了保护数据库免受攻击,"添加斜杠"和/mysql_escape_chars是否足够?

你还有什么建议?

非常感谢。

p.s.URI路由->www.example.com/search/category/query,其中query是要搜索的术语。

如果直接传递查询,建议的解决方案是在参数上使用mysql_real_escape_string——尽管这确实需要首先打开数据库连接。通过在转义时考虑数据库的字符编码,避免使用某些编码在字符中间进行转义,这一点非常重要。此外,mysql_escape_string已被弃用。

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

假设您使用的是Kohana的内置数据库工具,您也可以使用它的prepared语句支持或查询生成器,它也支持prepared查询,并且不需要转义。

使用Kohana ORM/Query Builder-它们将保护您免受SQL注入的影响。当您需要注意的唯一情况是使用DB::expr时,它不会逃离您的变量。阅读更多官方文档。

是的,这样的保护已经足够好了(如果你从文本区域插入数据,也差不多),但我会使用mysql_real_sescape_string。不要忘记在mysql查询中的搜索字符串周围添加s(... WHERE somecolumn LIKE 'query'而不是... WHERE somecolumn LIKE queryFULLTEXT搜索也是如此)

请确保在url查询参数

中对查询进行url_encode或base64_encode

这个问题对我来说没有多大意义。

  1. 为什么搜索只是你关心的问题?动态SQL查询获取参数是我们每个应用程序的基石。应该有一个通用规则(或一组规则)来覆盖动态SQL的每一种情况,而不仅仅是一种。

  2. Kohana当然有自己的操作SQL的工具。为什么要使用原始的"添加斜杠"/mysql_escape_chars?

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