WordPress插件和主题的安全最佳实践是什么?

时间:2011-03-30 作者:Chip Bennett

As suggested in this question, 我将此主题作为一个新问题添加进来,供社区讨论/投票关于插件/主题安全的最佳实践。

这是基于我当前(正在进行的工作)设置/用于审查主题的数据安全检查表的开始检查表(插件的原则应与主题的原则相同)。

如果要签出具有安全且可靠编码的主题设置页面的主题,请签出此主题:
http://wordpress.org/extend/themes/coraline

13 个回复
SO网友:Chip Bennett
SO网友:Chip Bennett

清理、验证和转义数据

Sanitize anything that could get in and out of (!) the database both front end and back end!

插件和主题应执行适当的数据验证:

  1. Validatesanitize 将数据输入数据库之前的所有不受信任的数据Escape 将所有不受信任的数据输出到设置窗体字段之前Escape 将所有不受信任的数据输出到主题模板文件之前

    • Data Validation (Codex)esc_attr() 对于文本输入和esc_html()esc_textarea() 用于文本区域。

      WordPress API还提供esc_url(), esc_url_raw(), esc_js()wp_filter_kses().

      Bad example:

      <?php $url = \'javascript:pwnd()\'; ?>
      <a href="<?php echo $url; ?>">anchor</a>
      

      Good example:

      <a href="<?php echo esc_url($url); ?>">anchor</a>
      
      以下是Mark Jaquith的精彩视频,介绍了转义函数的用法:

SO网友:Chip Bennett

只有小心地使用$\\u GET/$\\u POST/$\\u REQUEST,如果没有更好的API,插件和主题应该使用设置API来获取和保存表单输入数据,而不是依赖$_POST$_REQUEST 直接获取数据。

SO网友:Matteo Riva

使用$wpdb->prepare

通过构建自定义查询时$wpdb 对象,始终使用$wpdb->prepare 使用值填充占位符,而不是使用与SQL代码混合的数据编写查询,如mysql_* 家庭功能错误地教会了每个人。

SO网友:fuxia

小心使用可能用于运行恶意代码的PHP函数

对于任何编写PHP的人来说,这都是一本不错的读物:Exploitable PHP functions 在StackOverflow上。

使用Theme Modification API

主题应使用set_theme_mod() 和相关功能not 一个自创的名字方案one 根据我的经验,阵列和更容易处理。此外,它还为插件提供了标准化的过滤器,这有利于互操作性。

已启用避免register_globals

不要依赖register_globals = on. 我上一位客户购买的专业主题正是这样做的。我可以在5分钟内破解任何使用此主题的网站…
ThimbThumb也这样做了(现在仍然这样做?)。

不要创建具有不必要的广泛访问权限的文件,不要创建具有太多自由访问权限的文件。

如果可用,请使用SSL将您在推特/脸书/任何内容上的共享链接指向HTTPS URI(如果可用)。读者的安全也很重要。

SO网友:Chip Bennett

将数据保存在单个数组中

插件和主题应将选项保存在单个数组中,而不是为设置页面创建多个选项。使用设置API可以处理这个问题。

SO网友:Chip Bennett

在添加和输出设置页面时,检查是否有适当的功能插件应使用适当的功能(例如。manage_options) 添加设置页面的功能。

主题应使用edit_theme_options 根据相应的功能添加设置页面。

SO网友:Chip Bennett

使用最新的教程和信息;主题应故意实现选项和设置页面,并not 依赖于过时的复制和粘贴网站教程,这些教程不包括适当的数据安全性,例如下面列出的那些。

什么的示例not to do:

SO网友:Chip Bennett

使用设置API(Use Settings API)插件和主题应使用设置API(Settings API),该API更易于使用,更安全,并能处理设置页面的大量繁重工作:

有关使用设置API的良好教程,请参阅:

SO网友:Chip Bennett

前缀函数和变量名称

插件应使用插件slug为所有选项、自定义函数、自定义变量和自定义常量添加前缀。

主题应在所有选项、自定义函数、自定义变量和自定义常量前面加上主题slug。

SO网友:Chip Bennett

对于复选框和选择选项,插件和主题应使用checked()selected() 输出功能checked="checked"selected="selected", 分别地

SO网友:mfields

使用wp_safe_redirect() 而不是在指向同一域上的页面时直接调用php的header()函数。

SO网友:Chip Bennett

将设置页面添加到管理菜单的相应部分,插件应使用add_options_page() 函数将插件设置页面添加到Settings 菜单,而不是使用add_menu_page() 添加顶级菜单。

主题应使用add_theme_page() 函数将主题设置页面添加到Appearance 菜单,而不是使用add_menu_page() 添加顶级菜单。

结束

相关推荐

Security and .htaccess

大约一个月前,我在一个与爱好相关的托管服务器上创建了一个WordPress博客。所以,我目前还不熟悉这一点。由于我担心安全性,我做的一件事就是安装插件WP安全扫描。根据插件结果,我的网站会被检查出来,但我在结果中看到的是一个红旗:文件。wp admin中不存在htaccess/(我在那里ssh了,它不存在)好的,所以我在这个问题上做了大量的搜索,找到了太多的信息。htaccess。我在WordPress上经历了强化WordPress。org网站等,也遇到了这篇文章:http://digwp.com/201