我希望允许用户执行搜索而不限制任何角色。
是否足以“添加斜杠”以及/
或mysql_escape_chars
以保护数据库免受攻击?
你还有什么建议?
非常感谢。
P.S。 URI路由 - > www.example.com/search/category/query
其中query
是要搜索的字词。
答案 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)
为什么只搜索您的搜索?采用参数的动态SQL查询是我们每个应用程序的基石。应该有一个通用规则(或一组规则),涵盖动态SQL的每一个案例,而不仅仅是一个。
Kohana当然拥有自己运行SQL的工具。为什么要使用原始的“添加斜杠”/ mysql_escape_chars呢?
www.example.com/search/category/query将需要不必要的重定向。为什么不使用常规/search?cat=category&q=query
?谷歌似乎并不认为使用这些网址进行搜索是一种耻辱 - 你为什么要这样做?