Wordpress SQL 默认搜索,如何处理 SQL 注入

Posted

技术标签:

【中文标题】Wordpress SQL 默认搜索,如何处理 SQL 注入【英文标题】:Wordpress SQL default search, how to handle SQL Injection 【发布时间】:2017-06-24 05:46:04 【问题描述】:

Wordpress默认SQL搜索,默认搜索时如何处理SQL Injection

示例:Sitename.com/?q=test OR 1=1 --

即,

q=test%20or%201=1%20--

显示所有文章。

【问题讨论】:

【参考方案1】:

为此,您可以使用三个钩子,

'posts_join' 挂钩将您的自定义表加入到 post 表中 'posts_where' 挂钩扩展查询的 WHERE 子句以查找 您的自定义表格字段。

'posts_groupby' 钩子在查询中添加一个 GROUP BY 子句

add_filter( 'posts_join', 'prefix_search_join' );
add_filter( 'posts_where', 'prefix_search_where' );
add_filter ( 'posts_groupby', 'prefix_search_groupby' );

function prefix_search_join( $join )

  //global $custom_table contain your custom table name
  global $custom_table, $wpdb;

  if( is_search() ) 
    //your joining sql
  
  return $join;


function prefix_search_where( $where )

  if( is_search() ) 
   //Where clause 
   
  return $where;


function prefix_search_groupby( $groupby )

  global $wpdb;

  if( !is_search() ) 
    return $groupby;
  

  //we need to group on post ID
  $mygroupby = "$wpdb->posts.ID";

  if( preg_match( "/$mygroupby/", $groupby )) 
    //grouping we need is already there
    return $groupby;
  
  if( !strlen(trim($groupby))) 
    //groupby was empty, use ours
    return $mygroupby;
  
  //wasn't empty, append ours
  return $groupby . ", " . $mygroupby;
 

欲了解更多详情,请查看此链接https://codex.wordpress.org/Custom_Queries希望对您有所帮助

【讨论】:

嗨 Nahid,感谢您的输入,但我正在寻找这个示例:用户在搜索框中输入了“select * from wp_posts”。然后进行搜索提交。使用查询参数wordpress.org/search/select+%2A+from+wp_posts++--,即搜索结果:从 wp_posts 中选择 * -- (0)。我想自定义搜索结果,而不在占位符中添加查询。 对于 select 子句,您可以使用 add_filter( 'posts_groupby', 'prefix_search_select' );钩子。

以上是关于Wordpress SQL 默认搜索,如何处理 SQL 注入的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 SQL 数据库中的 RAISERROR

发现操作系统的数据库出现死锁如何处理

从 SQL Server 中检索各种存储过程的数据的单一方法,如何处理参数?

如何处理用 UISearchBar 和 UITableView 逐字搜索?

如何处理耗时的 SQL?

如何处理 AdWords 上的“低搜索量”关键字