WordPress 插件和主题开发人员的安全最佳实践
已发表: 2020-12-09作为 WordPress 开发人员,您必须就工作内容做出许多决定。 您的主要兴趣和优先事项是构建一个令人惊叹的主题或插件,当您坐在驾驶座上处理代码时,安全措施通常会退居二线。 您最后一次坐下来检查自己的代码是否存在安全问题是什么时候? 不,我不这么认为
这些技巧是基于我在 CleverPlugins 开发插件和帮助无数客户在被黑客入侵后让他们的网站重新上线的经验。 开发像 WP Security Ninja 这样的安全插件并没有让我对其他人的代码更加偏执。
网站被黑的最常见原因仍然是糟糕的密码管理,但这不应该成为使用一些简单方法保护代码的借口。
当您开发插件或主题时,您希望它变得流行并将其安装在尽可能多的网站上。 您的成功越大,人们就越有可能滥用您的工作来入侵您用户的网站。
由于WordPress的流行,它已成为黑客最常见的目标之一。 如果在插件或主题中检测到漏洞,则可能意味着成千上万(如果不是数十万)网站被滥用。
不幸的是,知名产品中经常出现漏洞,因此值得采取一些基本的安全措施来保护您的用户代码。
WordPress.org 审核小组怎么样?
您可能会认为,在发布到官方存储库之前审查插件和主题的团队会检查各种安全问题,但这个团队很小,只有几个人。 要检查的插件和主题的队列不断增加,因此他们必须审查每个的时间是有限的。
但是,如果他们确实找到了某些东西,他们可能会自动关闭您的插件,直到您修复它或通过电子邮件向您发送警告,告知您必须在特定时间范围内修复漏洞。
关键是,一旦您的插件或主题列在存储库中,您就可以通过存储库推送更新而无需额外筛选,因此漏洞可以随时轻松潜入,并且几乎在任何时间段内都不会被发现。
基本上,加强你的插件安全措施取决于你,所以让我们看看一些方法可以保护你的 WordPress 产品,防止你遇到很多麻烦,并可能对你的品牌产生负面影响。
以下是您可以采取哪些措施来安全地开发 WordPress 插件或主题。
1、全方位考虑安全!
您永远不知道谁可能在使用您的插件或主题,以及他们对安全性的了解程度(如果有的话)。
您永远不知道谁可能在使用您的插件或主题,以及他们对安全性的理解程度(如果有的话)。
任何客户网站上的管理员、编辑或普通用户可能不使用安全密码,他们的帐户可能会被黑客入侵。 如果您的产品不安全,这些帐户可能会被滥用以获得进一步的访问权限,以便在您客户的网站上安装恶意代码。
您不应期望已配置网站运行的服务器的服务器管理员足够了解如何保护您的网站免受同一服务器上的其他网站的影响。 如果网站由大型提供商托管,您可以期望网站被正确“分离”,但您不知道您的产品将安装在哪里。
这听起来很偏执吗? 可能是。 但是,如果并且当您的插件或主题变得超级流行时,您会很高兴采取偏执的方法来确保安全。
如果并且当您的插件或主题变得超级流行时,您会很高兴采取偏执的方法来确保安全。Tweet
2. 防止 XSS – 跨站脚本攻击
随着 WordPress 正在成为一个由 Gutenberg 和 ReactJS 更前端驱动的项目,这一点变得越来越重要。
WordPress 开发人员最常见的错误之一是忘记验证和清理他们的代码——使其容易受到 XSS 攻击。 XSS 有几种变体,但一般来说,当黑客被允许将代码注入服务器然后让它在访问者的浏览器中执行时,就会发生 XSS 攻击。
假设您有一个输入字段。 为简单起见,假设它是一个评论字段,用户或访问者可以在其中向帖子提交评论。
黑客将尝试使用"<script>alert('XSS');</script>"
提交评论。
现在,这只是一个在用户屏幕上弹出警报的基本示例,仅此而已。 真正的黑客将使用评论字段注入代码,从他们的站点加载代码,这些代码可以从访问者的浏览器中窃取信息等等。
我们可以通过验证、清理和转义来防止这种情况发生。
验证是在做任何事情之前检查提交的数据,例如将其存储在数据库中。 每当提交数据时,您都可以对其进行检查并确保其可接受。 如果它是数量字段,则需要一个数字。 如果不是数字,您可以向用户返回错误消息。
清理数据正在处理提交的信息并确保它不包含我们不想存储的任何内容,例如删除任何不需要的字符。 WordPress 内置了几个功能来帮助解决这个问题。 更多关于消毒的信息。
转义是防止任何恶意代码在您的浏览器中实际执行。 假设您已经在您的网站中注入了恶意代码,或者另一个插件或主题让黑客将代码插入您正在使用的数据中——在显示之前将数据转义到屏幕上可以防止它成为问题。
让我们看一下我们在"<script>alert('XSS');</script>"
之前使用的相同简单示例
如果我们不对这段代码做任何事情,浏览器会认为它是 HTML 代码。 这里重要的细节是用于定义 HTML 标记的 < > 字符。 通过转义这些,我们把<
变成<
和>
进入>
浏览器现在明白这不是实际的 HTML 代码,它应该只显示一个小于和大于号。
通过验证、清理和转义进出应用程序的所有数据,您可以保护用户免受最常见的攻击方法之一的侵害。
3.小心SQL注入
顾名思义,攻击者可以使用 SQL 注入来使您的网站处理经过调整的 SQL 查询,并使用它来访问您的数据库。
根据您存储在网站上的数据,让您的网站数据因 SQL 注入攻击而泄露可能会从尴尬到完全破坏您的声誉和业务。
SQL 注入是攻击网站的一种古老方式,但它仍然非常有效,并且有很多人在寻找使用这种攻击形式的方法。 2020 年 10 月,流行的 Loginizer WordPress 插件宣布他们存在 SQL 注入漏洞,导致超过 100 万个网站处于危险之中。
2019 年,未知黑客通过 SQL 注入攻击窃取了数百万保加利亚人的税收数据,2016 年,一群俄罗斯黑客在俄亥俄州提取了约 50 万人的选民信息。 这些类型的攻击仍然非常有效,您可以找到很多关于它们的信息。
来源:https://xkcd.com/327/
SQL 注入最常见的地方是在接受用户输入的表单字段中——例如,名称。 攻击是通过在输入字段中输入部分 SQL 代码来发生的,创建一个自定义查询,给出与您预期不同的结果。
假设您有一个允许人们搜索特定名称的表单。
SELECT * FROM wp_postmeta WHERE meta_value = 'Henry' AND meta_key = 'celebrity_name';
这个简单的示例将从 post 元表中提取所有行,其中所有行都具有名称Henry
和特定键celebrity_name
,这样,我们不会返回整个数据库,而只返回我们需要的特定行。
攻击者会尝试解析不同的值——例如'Henry' OR 1=1--
该查询现在将返回具有我们特定值的所有行,或者其他任何内容——因为 SQL 中的OR 1=1
始终为真。
不过,情况会变得更糟。 我们的 SQL 查询只要求meta_key
与我们正在寻找的特定值匹配的结果,因此我们不会返回所有内容。 这应该会限制 SQL 注入攻击的影响,对吧?
好吧,不是这样。 在 SQL 中,双破折号是注释指示符,因此后面的所有内容都会被注释。
SELECT * FROM wp_postmeta WHERE meta_value = 'Henry' OR 1=1--' AND meta_key = 'celebrity_name';
这意味着查询如下所示:
SELECT * FROM wp_postmeta WHERE meta_value = 'Henry' OR 1=1
查询现在基本上返回该数据库表中的所有内容。
这只是一个简单的例子。 有许多更复杂的方法可以访问数据库中的大部分(如果不是全部)信息。 攻击者将能够尝试盲目的 SQL 注入攻击,这意味着在您的数据库上运行代码——添加新管理员、删除所有数据等等。
大多数攻击都是随机查询字符串的形式,其中包含提交到您的网站表单的部分 SQL。 自动化脚本将检测您网站输出的任何更改,然后检测潜在的攻击。
一种简单有效的方法是发送一个撇号'
作为输入,并查看它是否改变了任何内容、发生错误或返回更多结果。
WordPress来救援
任何开发人员都不应直接与数据库交互,而应使用 WordPress 中内置的数据库抽象类$wpdb
。
WordPress 中的$wpdb
类具有安全与数据库交互所需的所有 CRUD 功能,如果您的插件或主题需要,您甚至可以使用该类与您自己的数据库表进行交互。
您可以通过预测在每个输入表单中应该合理输入什么样的数据来解决问题。 在前面的示例中,我们搜索了一个名称。 我们可以清理输入以确保我们只接受字母。 如果您有一个仅包含几个选项的选择框或单选组,您可以检查数据以确保它只是您允许的选择之一。
解决该问题的最重要的事情是使用$wpdb->prepare()
函数准备数据。
此函数采用准备好的查询字符串和要添加到 SQL 查询的参数数组。
$meta_key = 'celebrity_name'; $meta_val = 'Henry' $allhenrys = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->postmeta WHERE meta_key = %s AND meta_value = %s", $meta_key, $meta_val ) );
所有工作都在prepare()
函数中进行。 第一个参数,准备好的查询——包含占位符%s
而不是实际值。 这被其他已解析的变量$meta_key
和$meta_val
所取代。
注意 – 重要的是不要在占位符周围的查询中使用撇号,因为该函数会为您添加这些撇号。
这是一个简化的示例,但相同的过程可用于任何数据库查询,您可以将%s
用于字符串,将%d
用于整数,将%f
用于浮点数。
还有针对特定情况的功能,例如向数据库添加新行。 为此,您可以使用$wpdb->insert()
。
$wpdb->insert( "{$wpdb->prefix}my_custom_table", array( 'name' => 'Henry', 'userid' => 123, 'score' => 10, ), array( '%s', '%d', '%d', ) );
使用 prepare 函数可以帮助防止大多数针对您的产品的 SQL 注入尝试。
请记得查看 $wpdb 文档。 有些函数会为您转义输入; 其他人希望您在将数据解析到函数之前自己转义输入。
4. 使用 nonces 来保护你的请求
在 WordPress 中使用 nonce 系统可以帮助您防止许多攻击。 就安全性而言,随机数是仅使用一次的数字。 我们的想法是将此唯一编号添加到您从代码向 WordPress 安装发出的所有请求中,以验证此请求是否合法。
这有点像你需要给保镖一个秘密密码才能进入俱乐部
然而,WordPress 中的 nonce 有点不同——它们既不是数字也不是 nonce 只使用一次。
从技术上讲,WordPress 中的 nonce 可以同时包含小写字母和数字,而不是只使用一次,而是在一段时间后重新生成。
您使用 nonce 的方式是注册您的 JavaScript 文件的 PHP 代码会生成一些唯一的数字和字母组合,并对其进行解析,以便您的 JS 代码可以读取它。
每次 JavaScript 代码向您的网站发送请求时,它都会发送该段代码,如果代码不匹配,您的代码应该完全忽略该请求。
使用示例总是会更容易一些,因此让我们看一下按照以下步骤在插件中加载 .js 文件的简单方法:
在 WordPress 插件中使用 nonce
add_action('wp_enqueue_scripts', 'load_my_plugin_script'); function load_my_plugin_script() { // Register the script with all details and ensures it is loaded after jQuery wp_register_script('secure-plugin', plugin_dir_url( __FILE__ ). 'js/secure-plugin.js', array( 'jquery' ) ); // Here happens the magic, we add some details to an object that we can later reference and read from in our JS code. wp_localize_script( 'secure-plugin', 'plugin_ajax_object', array( 'nonce' => wp_create_nonce('secure-plugin-nonce') ) ); // Once that is done, we can now enqueue the script wp_enqueue_script('secure-plugin'); }
在这个函数中,我们告诉 WordPress 加载一个 JavaScript 文件。 首先,我们使用wp_register_script()
注册要加载的文件。
然后我们使用wp_localize_script()
来解析一个数据数组,特别是“nonce”,它包含我们想要在 JS 代码中使用的唯一 nonce。 请记住,您也可以在该数组中发送各种其他信息,但在此示例中我们只是保持简单。
当您从 JavaScript 文件发送请求时,您需要包含该唯一随机数。 这样做很容易:
在 JavaScript 文件中使用来自 WordPress 插件的 nonce
jQuery(document).ready(function($) { $.ajax({ url: ajaxurl, // WP variable, contains URL pointing to admin-ajax.php type: 'POST', data: { 'action': 'get_custom_data', '_ajax_nonce': plugin_ajax_object.nonce, 'user_data': 'Some input from a user' }, success: function( response ) { // Here we do what happens if all is good - update the interface with a success message!? }, error: function( response ) { // Whooops, something went wrong! // console.log(response); } }); });
由于我们使用wp_localize_script()
我们可以在 JavaScript 中使用 plugin_ajax_object 变量。 我们将 nonce 作为变量_ajax_nonce
。
从 JavaScript 代码检查和验证 WordPress 插件中的随机数
add_action('wp_ajax_get_custom_data', 'get_custom_data'); function get_custom_data() { // Ready for the magic to protect your code? check_ajax_referer('secure-plugin-nonce'); /** * That's it - the check_ajax_referer function verifies the nonce is correct or it dies and stops code execution if it fails. * * If you want to customize the error handling and perhaps return an error to your JS code, you could change the code to something like: * if ( ! check_ajax_referer( 'secure-plugin-nonce', false, false ) ) { * wp_send_json_error( 'Invalid nonce' ); * } */ $sanitized_user_data = sanitize_text_field( $_POST['user_data'] ); // ... continue with the rest of your plugin's function code ... }
神奇的是check_ajax_referer()
函数检查随机数,如果随机数与预期不匹配,则简单地失败并停止任何进一步的代码执行。
您可以进一步自定义代码,以向用户返回有关所发生情况的特定信息。
在代码中使用 nonce 是一种快速、简单且有效的方法,可以防止多种类型的黑客攻击。 这并不意味着您可以跳过所有其他安全措施,但它有助于减少最严重的问题。
还记得我说过从不相信任何人的话吗? 这给我们带来了另一种保护您的代码的方法——清理。
订阅并获取我们的书的免费副本
11 种行之有效的技巧,可将您的信用卡纠纷胜诉率提高 740%
与朋友分享
输入您朋友的电子邮件地址。 我们只会通过电子邮件向他们发送这本书,童子军的荣幸。
谢谢你的分享
太棒了 - 一份“11 个经验证的将信用卡纠纷胜诉率提高 740% 的技术”的副本刚刚发送到. 想帮助我们更多地传播信息吗? 继续,与您的朋友和同事分享这本书。
感谢订阅!
- 我们刚刚将您的“11 种经过验证的技术,可将您的信用卡纠纷胜诉率提高 740%”的副本发送至.
您的电子邮件中有错字吗? 单击此处编辑电子邮件地址并再次发送。
5.清理用户输入
在前面的示例中,我们包含了一条从 JS 发送到 PHP 的附加数据。 每次将数据输入代码时,您都应该期望它是不安全的。
'user_data':'Some input from a user'
在这个例子中,它是一个简单的字符串,但是由于我们将数据发送回 PHP,我们需要确保输入不包含任何可能在我们的 PHP 环境中被利用或存储在数据库中以允许进一步滥用的代码。
进来消毒。 WordPress 有一系列功能,可以接受您提供的任何输入并在将数据返回给您之前清理数据。
在此示例中,我们使用了函数sanitize_text_field()
,但 WordPress 带有许多适用于不同类型数据的清理函数。
WordPress 中内置了许多其他出色的功能和方法,您可以使用它们来确保代码安全并防止滥用。
你永远不应该使用任何发送到你的代码的数据,而不先对其进行清理。 查看这篇关于 WordPress 开发人员常见错误的文章,了解更多关于消毒和其他实用技巧的详细信息。
这让我想到了大多数 WordPress 开发人员都经历过的下一个技巧:
6. 记住is_admin()
不是你想的那样
当你第一次开始考虑保护你的代码免受恶意攻击时,你可能会偶然发现函数is_admin()
,从名字上看,它听起来就是你需要的一切,你需要做的就是用它来包装你的代码,并且一切都会好起来。
不,很遗憾没有。 函数is_admin()
仅检测代码是否正在网站的管理端执行。 它无法检测您的代码是否由普通用户或管理员运行。
如果您只是在插件中输入代码,您将永远不会注意到它,因为您很可能在管理界面中运行代码,这意味着代码只会评估为true
,您将停止思考并继续做某事别的。
检查用户是否为管理员的正确方法是检查用户能力:
if ( current_user_can( 'activate_plugins' ) ) { // Do your code here }
不同的用户角色有不同的功能,因此您可以进行更精细的控制。 在大多数情况下, 'activate_plugins'
只是管理员需要的。
如果您想要一种允许管理员和编辑者做某事的方法,您应该测试'edit_pages'
功能。
7. 将 rel=”noopener” 或 rel=”noreferrer” 添加到您的链接
链接到外部资源是很正常的,将target="_blank"
添加到这些链接的老式方法是有意义的,因为您不希望您的用户离开您的插件/主题页面。
但是,这为您打开了所谓的 Tabnabbing 的大门。 这是一个安全问题,恶意 JavaScript 代码可以通过滥用 JavaScript window.opener
功能从您的用户那里窃取信息。
防止这种情况的发生就像在链接中添加rel="noopener"
一样简单。 您今天链接到的页面可能还不错,但将来可能会改变。
rel=noopener
表示您链接到的页面无法访问信息或获得对您页面的任何控制权。
rel=noreferrer
做同样的事情,并且还指示浏览器不要通过 Referrer 标头传递任何推荐信息。 添加rel="noreferrer"
意味着您链接到的页面不知道您的访问者来自哪里。
注意:这两个属性不应与rel=nofollow
混淆,后者与 SEO 有关。
8. 将 HTTPS 和安全令牌与第 3 方 API 一起使用
作为开发人员,您经常需要集成 API,安全地执行此操作以保护来回发送的数据至关重要。
幸运的是,已经制定了如何安全执行此操作的标准; 其中之一是HTTPS。 使用 HTTPS 引入了一层安全性,其中传输的所有数据都经过加密。
但是,要确保您的数据免受间谍的侵害,仅使用 HTTPS 是不够的。
正如 Ars Technica 的这篇文章所解释的,“HTTPS 并不意味着您的数据是安全的,它只是意味着您的连接是安全的。”
安全令牌 – JWT
处理通信和 API 集成的安全标准是使用 JSON Web Tokens,JWT。
安全令牌是通过向服务器发出请求来创建的,该服务器验证用户的登录详细信息并生成令牌,这是一小段包含数据的字符串,例如用户名、ID 等。
当您向服务器发送任何后续请求时,您会在请求中包含该令牌。 此令牌证明您已通过身份验证并具有访问权限。 如果令牌有效且未过期,服务器将使用令牌中包含的用户详细信息并拉取请求的数据。
与使用 API 密钥相比,服务器可以通过这种方式快速处理请求,后者需要在决定处理数据之前通过该密钥查找用户。 使用令牌,您可以在令牌内包含有关用户的数据并保存多个数据库查询。
通过生成和随后使用安全令牌的方式,不可能创建假令牌或操纵令牌的内容。 只有知道一个秘密密钥才能创建一个有效的令牌,平台背后的公司将把它很好地隐藏起来。
要记住的一个非常重要的注意事项是令牌内的数据未加密。 不使令牌无效就不可能篡改令牌内容,但是令牌内的数据很容易被任何人读取,因此不是存储敏感数据的好地方。
如果您想深入了解令牌及其工作原理,一个很好的资源是 JSON Web 令牌简介。
9. 不要使用 CDN 的外部库
尽管通过 cdnjs.com 或其他免费的全球 CDN 包含您可能需要的任何库可能很诱人,但也有一些缺点。
首先,您无法控制库和潜入您包含的文件的任何恶意代码。
虽然 CDN 通常从定义上讲是稳定和快速的,但它们也受到更多攻击。 如果您的代码依赖于受攻击的 CDN 上的 JS 库,那么您的插件和主题将加载非常缓慢或根本不加载。
这发生在一个客户网站上,当时某个插件使用的公共 CDN 对某些地区的用户来说超时,导致界面无法使用。 最后,我不得不更改插件以使用 JS 脚本的本地副本作为快速修复。
使用外部第三方来源也可能损害隐私。 CDN 可能会记录您的所有用户 IP - 请务必检查 GDPR 政策并通知您的客户。
一般来说,如果您使用信誉良好的 3rd 方 CDN 提供商,您不会遇到任何问题,但最简单和最可靠的方法是分发您产品中包含的 JS 库。
你知道吗? WordPress 附带了几个 JS 库。 您可能想要使用的许多更常见的 JS 库都包含在 WordPress 中。 这些库将满足您的大部分基本需求。
开发者提示:请仅在您需要的特定页面上加载额外的 JS 和 CSS 文件。 作为开发人员和用户,我非常不喜欢通过在每个页面上加载不需要的 JS 和 CSS 文件来减慢管理员速度的插件。 它不仅会减慢其他管理页面的速度,而且还会真正扰乱视觉布局,使一些管理页面几乎无法使用。 请
还有一些工具可以帮助您保护代码,一个可以免费使用的好工具是 Coderisk。
10.使用工具和服务来分析你的代码
代码风险
有许多自动化服务可以帮助识别代码问题。 Exakat、SonarSource 和 PHPStan 仅举几例,也是我的最爱 - Coderisk.com - 一种在代码中查找一些更明显的安全错误的简单方法。
该公司从公共 WordPress.org 存储库中扫描所有 WordPress 插件。 他们的软件能够根据不同的编码标准扫描和识别数百种不同类型的安全问题。
根据他们自己的统计,到目前为止,他们已经扫描了超过 40 亿行公共代码,即使是顶级插件也存在相当多的问题。
注册他们的免费服务非常简单——您可以创建一个免费帐户,然后开始申请您的插件。 声明插件就像在下次部署新版本时将一行代码放入 readme.txt 中一样简单。
这使您可以访问他们对您的插件的最新扫描,并且在内部,他们具有有关每个问题的特定信息和详细信息,并带有直接指向您的代码的链接。
请记住,这是一项免费服务,因此他们可能不会经常更新对您插件的扫描,但是一旦您收到通知,就值得检查您的代码,因为自上次查看以来您可能已经引入了错误你的代码。
一旦你掌握了它的窍门,这个界面就很容易导航,而且这个系统非常有用,给你很容易理解的错误说明,帮助你跟踪错误。
还有很多过滤错误的方法,您可以将每个问题标记为已修复或许多其他选项,以帮助您快速了解所有问题。
注意:如果您从未在您的代码上运行 Coderisk(或其类别中的任何其他工具),请不要担心您会收到警告的可疑问题的数量。 这些工具可能会产生大量误报,因为它们只分析代码而不了解业务逻辑。 使用该工具的输出作为要查看的项目的可靠起始列表。
PHP_CodeSniffer
另一个检查代码的好工具是 PHP_CodeSniffer。 PHPCS 由两个脚本组成,一个是检查您的代码并向您报告错误的 PHPCS,另一个是可以自动修复 PHPCS 识别的大量问题的 PHPCBF。
一旦安装了 PHPCS,就可以很容易地从命令行使用它。 此工具不会阻止代码中出现安全问题,但您可以消除简单的编码错误,这使得滥用任何更大的问题变得更加困难。
也可以将 PHPCS 直接集成到您的编辑器中,例如 Sublime Text 和 Visual Code。 通过这种方式,您可以轻松查看任何错误并在 IDE 中快速修复它们。
无论您是在团队中工作还是作为单个开发人员工作,都值得使用自动化系统,因为它是消除您可能错过的基本安全问题的简单方法。
使用自动化系统扫描代码以查找安全问题并不是一种安全的包罗万象的错误方法,但它可以帮助您查明最明显的错误。
11. 不要在没有经过适当审查的情况下从网上复制粘贴代码
确保您的 WP 产品尽可能安全应该是一个持续的过程,而不仅仅是偶尔。 当您引入新功能或删除代码时,您还可能引入新的安全问题。
谷歌并不总是你的朋友。 作为开发人员,您习惯于在广阔的互联网上查看代码示例来激发您的灵感——或者如果您很懒惰,您也可以在这里和那里重写一些零碎的代码。
您在 Internet 上找到的大多数代码段很少准备好在安全的生产环境中使用,并且只是作为您尝试修复的任何编码问题的示例。 盲目地使用这些代码并且没有审查会很快引入问题。
作为 WordPress 开发人员,有很多工作要做,而通过数千次安装来解决插件中的紧急安全问题不应该是其中之一。
请记住,您的声誉受到威胁
如果您不注意插件或主题的安全性,那么您的用户、他们的业务、您的业务和您的声誉就会受到威胁。 这可能会浪费很多时间和金钱!
安全漏洞会对客户对您的品牌或产品的信任和信心产生巨大影响。 上面的 Loginizer 示例表明,即使是最令人尴尬的安全漏洞也可能发生在安全插件开发人员身上! 其他关于选民欺诈和政府黑客行为的例子告诉我们,任何人都是脆弱的。
如果当您发现漏洞时,请迅速采取行动解决它,并遵循最佳实践公开宣布问题(如有必要)并发布修复程序。
如果您在沟通和可能由漏洞引起的“公共关系”问题上保持领先,那么您可以避免一些巨大的麻烦并提高您的声誉而不是损害它。
谢谢阅读!
当您不知道从什么开始时,查看您需要做的所有事情可能会令人生畏,而且很难找到正确的信息。 如果您不知道从哪里开始,您应该考虑让 WP 安全专家对您的产品进行审查(我也进行安全审查)。
节省金钱或时间进行安全审查很诱人,但从长远来看,不尽可能保护产品的成本可能会更高。
这些只是您可以而且应该保护您的 WordPress 产品免受滥用的一些方法。 如果您有任何疑问,请记住——不要相信任何人