清理数据的最佳方法是什么?

时间:2011-01-29 作者:Steven

我读过几个关于这方面的话题,不同的人对最佳实践有不同的看法。

就WordPress而言,如何以最安全的方式将数据写入数据库?

这是我现在使用的一个插入:

$result = $wpdb->insert(
    $table_name , 
    array( 
        \'arena\'         => $galleryData[\'arena\'],
        \'year\'          => substr( $galleryData[\'season\'], 2 ),
        \'copyright\'     => $galleryData[\'copyright\'],
        \'description\'   => $galleryData[\'description\'],
        \'path\'          => $galleryData[\'path\'],
        \'fk_brand_id\'   => $galleryData[\'brand\']
    ), 
    array( \'%s\', \'%d\', \'%s\', \'%s\', \'%s\', \'%d\' )
);
插入数据的另一种方法是:

$sanitized_sql = $wpdb->prepare( "
    INSERT INTO my_plugin_table 
    SET 
        field1 = %1$d,
        field2 = %2$s,
        field3 = %3$s’,
        32, 
        \'Aaron Brazell\',
        \'Washington, D.C\'
" );
$wpdb->query( $sanitized_sql );
我是否仍需要使用清理数据wp_kses()mysql_real_escape_string()?

我只是不知道什么方法更适合安全地将数据写入数据库。我发现了一个有用的answer on Stack Overflow.

So should I or should I not sanitize data before input?

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

否已完成消毒。那么mysql_real_escape_string 完成后,在输入时过滤html被认为是错误的形式。我个人认为,在输出上这样做有点干涸。如果您在WordPress中这样做了,我高度怀疑其他地方会再次这样做,导致双重html实体编码。

另外,wpdb::insert基本上只是wpdb::prepare的包装。

SO网友:Rarst

请注意storing data safely 不同于safe data. 例如,JavaScript代码在数据库安全上下文中可能是完全无害的,但在前端上下文中却是噩梦。

没有单一的一揽子办法,这就是为什么WordPress has massive amount of related functions.

您必须考虑:

什么是数据

结束

相关推荐

$wpdb->日期时间列的INSERT()和值?

我有一个带有DATETIME列的自定义表。我有一个添加记录的功能;我想添加一个$expires 此函数的参数,该参数可以保存unix时间戳,指出记录应在何时过期。我想使用$wpdb->insert() 填充此列。到目前为止,我还找不到WordPress的便捷功能来将时间戳转换为“YYYY-MM-DD HH:MM:SS”格式。有这样一个内置的吗,还是我应该使用$wpdb->prepare(), 或者可能是第三种选择?