Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在wordpress中使用stripslashes()是否不安全?_Wordpress_Security - Fatal编程技术网

在wordpress中使用stripslashes()是否不安全?

在wordpress中使用stripslashes()是否不安全?,wordpress,security,Wordpress,Security,当我创建输入时 <input type="text" name="456" value="123"> 但我需要以下方式的文本: "my text". 这就是我在进一步处理数据之前使用该函数的原因: stripslashes() 这是针对黑客攻击的不安全解决方案吗?知道这一点至关重要,因为我通过API发送密码。这应该是安全的 据 根据PHP.net的说法:从5.3版开始,Magic Quotes就被弃用了,不会成为未来版本的一部分 见: 快速回答 将此添加到您的PHP中: &

当我创建输入时

<input type="text" name="456" value="123">
但我需要以下方式的文本:

"my text". 
这就是我在进一步处理数据之前使用该函数的原因:

stripslashes() 
这是针对黑客攻击的不安全解决方案吗?知道这一点至关重要,因为我通过API发送密码。

这应该是安全的

根据PHP.net的说法:从5.3版开始,Magic Quotes就被弃用了,不会成为未来版本的一部分

见:

快速回答 将此添加到您的PHP中:

<?php 
if ( get_magic_quotes_gpc() ) {
    $_POST      = array_map( 'stripslashes_deep', $_POST );
    $_GET       = array_map( 'stripslashes_deep', $_GET );
    $_COOKIE    = array_map( 'stripslashes_deep', $_COOKIE );
    $_REQUEST   = array_map( 'stripslashes_deep', $_REQUEST );
}
?>

我猜这不是WordPress,而是您安装的启用了魔术引号的PHP。您应该修改php.ini以禁用魔术引号。魔法格言是邪恶的

从PHP5.3开始,魔法引号就被弃用,并从PHP5.4中完全删除

更新 我从来没有听说过脱衣舞被破坏。这是一个正在输入的字符串,它将是一个在输出时带有较少斜线的字符串。因此,如果您无法关闭magic quotes,那么我将使用stripslashes从$\u帖子中删除引号,等等。如果您担心删除slashes会影响其他插件(尽管我会感到惊讶),那么您可以这样做:

class Http {
    private $_instance;
    private $_post;
    private $_get;
    private $_cookie;
    private $_request;

    //singleton pattern to avoid parsing multiple times.
    public static function instance() {
        if( is_null($this->_instance) ) {
            $this->_instance = new self();
        }
        return $this->_instance;
    }
    private function __construct() {
        $isMagicQuotesOn    = get_magic_quotes_gpc();

        $this->_post        = $isMagicQuotesOn ? array_map( array($this,'removeMagic'), $_POST )    : $_POST;
        $this->_get         = $isMagicQuotesOn ? array_map( array($this,'removeMagic'), $_GET )     : $_GET);
        $this->_cookie      = $isMagicQuotesOn ? array_map( array($this,'removeMagic'), $_COOKIE )  : $_COOKIE;
        $this->_request     = $isMagicQuotesOn ? array_map( array($this,'removeMagic'), $_REQUEST ) : $_REQUEST;
    }
    public function removeMagic( $value ) {
        return is_array($value) ? array_map(array($this,'removeMagic'), $value) : stripslashes($value);
    }

    public function get( $var ) {
        return isset($this->_get[$var]) ? $this->_get[$var] : null;
    }
    public function post( $var ) {
        return isset($this->_post[$var]) ? $this->_post[$var] : null;
    }
    public function cookie( $var ) {
        return isset($this->_cookie[$var]) ? $this->_cookie[$var] : null;
    }
    public function request( $var ) {
        return isset($this->_request[$var]) ? $this->_request[$var] : null;
    }
}
然后,可以通过以下方式访问变量:
Http::instance()->get('myvar')。一旦您这样做了,那么您只需要在执行SQL操作、mail()头等之前对输入进行适当的清理,这是可能发生注入的地方。对于DB,应该使用类似mysql_real_escape_string(遗留)或Pdo::quote()(当前)。这些方法采用DB上下文并正确清理该DB的数据,这比addslashes更安全


就我个人而言,我宁愿禁用魔法引号。但是如果你不能做到这一点,这种方法应该是有效的。

对于未来的读者来说,前面的答案是完全错误的。根据per的评论,WordPress在内部强制执行与magic quotes等效的命令,以确保一致的输入、向后兼容性,并保护新手不受WP安装的影响。这是过去糟糕日子的宿醉™ 当人们在不进行任何清理/验证的情况下直接将数据插入数据库时,通常只针对他们看到的问题编写黑客解决方案,而不是正确地执行

在数据上使用
stripslashes()
stripslashes_deep()
是安全的,只要您在将数据保存到数据库时正确地通过
$wpdb->insert()
$wpdb->prepare()
等传递任何未扫描的数据永不将未转义的数据写入超全局变量,如
$\u POST
,这些变量应保持转义状态,使用副本,如
$my\u POST=stripslashes\u deep($\u POST)。大多数人都希望你能自己逃避,这就是为什么过去经常看到很多反斜杠乱扔WP内容的原因


这与html输出转义完全不同,html输出转义应始终在不受信任的用户输入上完成。

实际上,一些插件可能依赖这些神奇的引号。批量删除它们可能会使您容易受到SQL注入之类的漏洞的攻击。@Gumbo,没有一个由程序员编写的WordPress插件会依赖于特定于系统的魔法引号。几乎所有我见过的magic quotes代码都是检查它是否打开,然后删除它们,这样你的插件就可以移植了……任何程序都不应该依赖它们的存在……这是一个巨大的安全风险。@KevinNelson甚至有几次。@Gumbo,问题不在于addslashes……当你自己运行addslashes时,这很好。你确切地知道发生了什么,而且它是便携式的。当您依赖于在分布式应用程序中启用的特定于系统的magic quotes配置时,就产生了安全问题。这就是为什么magic quotes被弃用的原因……它会鼓励糟糕的编程。@KevinNelson:您认为使用stripslashes($_POST['XYZ'])的解决方案怎么样;每当我在php站点上捕获$_POST['XYZ'],并且需要不带斜杠的变量时。您认为这是安全的还是有人使用我的变量$_POST['XYZ']发送了一些恶意代码,stripslashes()实际上使这些恶意代码复活。WordPress模仿魔术引号实现向后兼容,即使在PHP中禁用了它--
class Http {
    private $_instance;
    private $_post;
    private $_get;
    private $_cookie;
    private $_request;

    //singleton pattern to avoid parsing multiple times.
    public static function instance() {
        if( is_null($this->_instance) ) {
            $this->_instance = new self();
        }
        return $this->_instance;
    }
    private function __construct() {
        $isMagicQuotesOn    = get_magic_quotes_gpc();

        $this->_post        = $isMagicQuotesOn ? array_map( array($this,'removeMagic'), $_POST )    : $_POST;
        $this->_get         = $isMagicQuotesOn ? array_map( array($this,'removeMagic'), $_GET )     : $_GET);
        $this->_cookie      = $isMagicQuotesOn ? array_map( array($this,'removeMagic'), $_COOKIE )  : $_COOKIE;
        $this->_request     = $isMagicQuotesOn ? array_map( array($this,'removeMagic'), $_REQUEST ) : $_REQUEST;
    }
    public function removeMagic( $value ) {
        return is_array($value) ? array_map(array($this,'removeMagic'), $value) : stripslashes($value);
    }

    public function get( $var ) {
        return isset($this->_get[$var]) ? $this->_get[$var] : null;
    }
    public function post( $var ) {
        return isset($this->_post[$var]) ? $this->_post[$var] : null;
    }
    public function cookie( $var ) {
        return isset($this->_cookie[$var]) ? $this->_cookie[$var] : null;
    }
    public function request( $var ) {
        return isset($this->_request[$var]) ? $this->_request[$var] : null;
    }
}