WPDB secure custom form

时间:2015-01-02 作者:testermaster

我正在创建一个自定义表单来更新辅助MYSQL数据库中的行,这与wordpress的表单不同。此表单是公共的,每个用户都可以访问它。因此,我创建了一个插件,并使用wpdb连接数据库。

如何以安全的方式执行此操作?

我使用的是sanitize\\u text\\u field(),然后是wpdb->update()。这是安全的还是应该使用esc\\u sql()?

如果我不能使用wpdb->update(),因为我需要一些!=where子句中的字段,可以使用sanitize\\u text\\u field(),然后使用wpdb->prepare(),然后使用wpdb->query()吗?

2 个回复
SO网友:cybmeta

在将用户输入存储到数据库中时,一个好的方法是:

  1. Data validation: 根据预期数据验证数据。例如:HTML字符串、数字、电子邮件、URL、任何没有HTML的文本等。永远不要信任用户输入或客户端验证。您也可以在这里进行一些清理,但它不能替代数据验证,也不能替代数据扫描
  2. SQL escape: 我想这里不需要解释。WorPress提供了一些函数和方法来执行此操作。esc_sql 是准备用于数据库查询的字符串的常规函数。但如果您使用wpdb类,则并不总是需要。例如,如果使用$wpdb->insert$wpdb->update 数据不应被替换,因为它将为您完成
如果使用$wpdb->query, 对查询进行scape处理的最佳方法是使用$wpdb->prepare 方法附加的scape方法在wpdb类中可用;看见this of how to use $wpdb->prepare 还有这个data escape before database interaction.

SO网友:Motahar Hossain

安全地将数据插入WPDB的示例。它是防止sql注入的预处理方法。首先创建表单,然后按照以下结构插入数据。Example:

$insert_value_array = array(
    \'input\' => \'\',      // name of your input field
    \'textarea\' => \'\',   // field name
    \'select\' => \'\',     // field name
    \'checkbox\' => \'\',   // field name
);

$form_item = shortcode_atts( $insert_value_array, $_REQUEST );

if(isset($_POST[\'submit\'])){

    global $wpdb;

    $full_table_name = $wpdb->prefix . \'your_table_name\';

    // $wpdb->insert( $full_table_name, $form_item); // It\'s without prepare method

 // Safe data insertion with prepare method ( successful )
    $wpdb->query( $wpdb->prepare( 
                "   INSERT INTO $full_table_name
                    ( column_name_1, column_name_2, column_name_3, column_name_4 )
                    VALUES ( %s, %s, %s, %s ) 
                ", // VALUES depends on your datatype. %s for string, %d for integer
                    $form_item
            ) );

};

结束

相关推荐

我应该编辑哪些PHP文件来更改帖子列表和查看页面?

我对WP完全陌生,但现在我遇到了一个情况,需要在我的magento商店中集成博客,以便我使用WP博客,现在我需要编辑blogs posts List page 和posts view page 我想通过编辑来完成此操作.php 文件,但我无法理解WP结构,也无法找到与帖子相关的确切文件。请帮我完成这个提前感谢