使用设置 API 时,WordPress 是否转义数据以防止 SQL 注入?
Does WordPress escape data to prevent SQL injections when using the Settings API?
我很难找到有关此主题的任何信息。我正在创建一个插件,允许用户添加自定义 JS 代码,例如但不限于 Google Analytics。为此,我使用设置 API 创建了一个包含几个 textarea
字段的设置页面。我使用以下页面作为指南:https://developer.wordpress.org/plugins/settings/custom-settings-page/.
我的问题是,我需要做什么来确保进入数据库的数据是安全的?或者它已经安全了(即被 WordPress 转义)?我考虑过在 register_setting
函数的回调中使用 sanitize_textarea_field
函数,但是,数据(例如 <script src="example.com/script.js"></script
)在被 WordPress 序列化后无论是否使用清理功能看起来都完全一样.
如果我使用设置 API,我是否可以安全地假设 WordPress 转义所有进入数据库的数据,或者我是否需要编写自定义代码来执行此操作?如果是这样,如果我使用设置 API,转义数据的过程是什么?
是的,当您使用 WP API(不仅用于设置,还包括其他功能,如 update_post_meta
、wp_insert_post
等)时,WP 将确保该数据在发送到数据库之前已正确转义。
少数例外情况会明确说明您可以输入 SQL(例如 posts_orderby filter)。
除非你的数据中有不安全的字符(单引号!),否则你不会看到转义前后的变化。请注意,sanitize_* 函数不处理 SQL 注入,但会尝试清理内容。
您可以使用 $wpdb->prepare() 语句占位符技术使您的 sql 查询更安全,并在插入数据库之前防止 sql 注入。
如果你想在传递给 $wpdb->prepare() 语句之前清理用户输入的 textarea 值,你可以使用 sanitize_textarea_field() wordpress sanitizer 方法来清理 textarea 输入值。
$table_name = 'myTable';
$content = isset($_POST['user_input']) ? sanitize_textarea_field($_POST['user_input']) : '';
$myID = 12;
$wpdb->query($wpdb->prepare("UPDATE `$table_name` SET `your_column_1` = %s WHERE `$table_name`.`your_column_id` = %d", $content, $myID));
我很难找到有关此主题的任何信息。我正在创建一个插件,允许用户添加自定义 JS 代码,例如但不限于 Google Analytics。为此,我使用设置 API 创建了一个包含几个 textarea
字段的设置页面。我使用以下页面作为指南:https://developer.wordpress.org/plugins/settings/custom-settings-page/.
我的问题是,我需要做什么来确保进入数据库的数据是安全的?或者它已经安全了(即被 WordPress 转义)?我考虑过在 register_setting
函数的回调中使用 sanitize_textarea_field
函数,但是,数据(例如 <script src="example.com/script.js"></script
)在被 WordPress 序列化后无论是否使用清理功能看起来都完全一样.
如果我使用设置 API,我是否可以安全地假设 WordPress 转义所有进入数据库的数据,或者我是否需要编写自定义代码来执行此操作?如果是这样,如果我使用设置 API,转义数据的过程是什么?
是的,当您使用 WP API(不仅用于设置,还包括其他功能,如 update_post_meta
、wp_insert_post
等)时,WP 将确保该数据在发送到数据库之前已正确转义。
少数例外情况会明确说明您可以输入 SQL(例如 posts_orderby filter)。
除非你的数据中有不安全的字符(单引号!),否则你不会看到转义前后的变化。请注意,sanitize_* 函数不处理 SQL 注入,但会尝试清理内容。
您可以使用 $wpdb->prepare() 语句占位符技术使您的 sql 查询更安全,并在插入数据库之前防止 sql 注入。
如果你想在传递给 $wpdb->prepare() 语句之前清理用户输入的 textarea 值,你可以使用 sanitize_textarea_field() wordpress sanitizer 方法来清理 textarea 输入值。
$table_name = 'myTable';
$content = isset($_POST['user_input']) ? sanitize_textarea_field($_POST['user_input']) : '';
$myID = 12;
$wpdb->query($wpdb->prepare("UPDATE `$table_name` SET `your_column_1` = %s WHERE `$table_name`.`your_column_id` = %d", $content, $myID));