Wordpress SQL injection

时间:2015-04-11 作者:Zeeshan

如何使下面的代码不受sql注入的影响。。。我在wordpress工作。全球wpdb美元;

    if($wpdb->insert(
            \'votes\',
            array(
                    \'votes\' => $votes,
                    \'competition\' => $competition,
                    \'uid\' => $uid


                )
    ) == false) wp_die(\'Database Insertion failed\'); else echo \'Database insertion successful<p />\';

2 个回复
最合适的回答,由SO网友:cybmeta 整理而成

的插入方法$wpdb 已经将数据替换为SQL注入。您应该担心的是数据清理和验证。

对于exmpla:

Sanitization

您在中接受什么类型的数据$votes? 整数值?如果是,请确保$votes 包含整数值。对于exmaple,您可以使用intval function 来自PHP。这是消毒。

$votes = intval( $votes );
您在中接受什么类型的数据$competition? 任何没有HTML、制表符或换行符的字符串?如果是,请确保$competition 包含字符串值,剥离HTML标记并删除选项卡和换行符;对于exmaple,您可以使用sanitize_text_field function 来自WordPress。这也是消毒。

$competition = sanitize_text_field( $competition );

Data validation

您接受的价值是多少$votes? 从0到100,包括两者?如果是,您可以检查$votes:

if( $votes >= 0 && $votes <= 100 ) {

    // Value is correct

} else {

    // Value is not correct. Maybe abort the process?

}
你有有效比赛的名单吗?检查的值$competition 反对:

$valid_competitions = array( \'competition1\', \'competition2\', \'competition3\' );

if( in_array( $competition, $valid_competitions ) ) {

    // Value is correct

} else {

    // Value is not correct. Maybe abort the process?

}
对执行相同的过程$uid.

一旦您对变量进行了santize和验证,就可以将它们传递给$wpdb->insert 方法(使用第三个参数执行基本清理,如果这足以满足您的情况,则可以避免以前的清理):

$wpdb->insert(
     \'votes\',
     array(
         \'votes\'       => $votes,
         \'competition\' => $competition,
         \'uid\'         => $uid
     ),
     array(
          \'%d\', // integer data type for $votes
          \'%s\', // string data type for $competition
          \'%d\', // integer data type for $uid
     )
);

SO网友:TheDeadMedic

wpdb::insert 已经可以防止SQL注入,它是wpdb::prepare

对于insert(), 您可以传递第三个“formats”参数以进行额外的清理:

$wpdb->insert(
     \'votes\',
     array(
         \'votes\' => $votes,
         \'competition\' => $competition,
         \'uid\' => $uid
     ),
     array(
          \'%s\', // $votes will be parsed as a string
          \'%s\', // $competition will be parsed as a string
          \'%d\', // $uid will be parsed as an integer
     )
);

结束

相关推荐

将第二个jQuery库临时加载到WordPress的安全方法

为了测试(以及完全临时的目的),我想将jquery cdn加载到我的wordpress头中。php文件。我无法确定这是否可行,并假设我需要为noconflict等进行设置。我已经找到了有关函数的文档。php方法,但是,这方面的工作将无法达到在标头中进行测试的目的。php。以前有人这样做过吗?