워드 프레스 및 마법 따옴표


12

Wordpress 플러그인을 작성하고 있으며 Wordpress에서 POST 및 GET 데이터에 마법 따옴표를 넣는 데 문제가 있습니다.

특히 \ wp-includes \ load.php의 "wp_magic_quotes"함수는 wp-settings.php에서 (아마도 모든 응답에서) 호출됩니다. 이 함수는 PHP 설정에서 마술 따옴표를 끄더라도 데이터에 마술 따옴표를 추가합니다.

/**
 * Add magic quotes to $_GET, $_POST, $_COOKIE, and $_SERVER.
 *
 * Also forces $_REQUEST to be $_GET + $_POST. If $_SERVER, $_COOKIE,
 * or $_ENV are needed, use those superglobals directly.
 *
 * @access private
 * @since 3.0.0
 */
function wp_magic_quotes() {
    // If already slashed, strip.
    if ( get_magic_quotes_gpc() ) {
        $_GET    = stripslashes_deep( $_GET    );
        $_POST   = stripslashes_deep( $_POST   );
        $_COOKIE = stripslashes_deep( $_COOKIE );
    }

    // Escape with wpdb.
    $_GET    = add_magic_quotes( $_GET    );
    $_POST   = add_magic_quotes( $_POST   );
    $_COOKIE = add_magic_quotes( $_COOKIE );
    $_SERVER = add_magic_quotes( $_SERVER );

    // Force REQUEST to be GET + POST.
    $_REQUEST = array_merge( $_GET, $_POST );
}

wp-settings.php에서 wp_magic_quotes () 호출을 주석 처리하는 것이 안전합니까? 즉, 일반 Wordpress 코드에 부정적인 영향을 미치거나 악용 벡터를 열 수 있습니까? 그렇다면 WP 코드 수정 외에 다른 방법이 있습니까 (따라서 업데이트가있을 때마다 처리 할 필요가 없습니다)?


어디에서 언제 함수 wp_magic_quotes()가 실행 되는지 말해 줄 수 있습니까 ? wp-core에서 실행을 찾을 수 없습니다.
T.Todua


이 문제는 8 년이 지난 후 2019 년에도 여전히 존재합니다 (예 : PHP 7.1.33 (2019-10-23) 및 WordPress 5.2.4 (2019-10-14)).
Peter Mortensen '12

답변:


8

간단히 WP를 사용하여 결정되지 않은 상황 (서버 구성에서 마술 따옴표가 활성화되거나 활성화되지 않을 수 있음)을 결정합니다 (마술 따옴표는 항상 존재하며 서버 구성은 중요하지 않음).

모든 WP 코어 에서이 문제를 해결하는 대신 필요할 때 코드에서 슬래시를 자신의 변수로 제거하는 것이 훨씬 더 합리적입니다.


7
내가 할 수 있다면 이것은 미쳤다. 마술 따옴표는 제정신 코더에 의해 나쁜 것으로 간주되며, 이것은 Wordpress에 의해 정말로 무책임한 선택입니다. 내가 놀란 것은 아닙니다.
o0 '.

5
@Lohoris는 WP가 지금 여기에 존재하지 않는다는 점에 주목합니다. 그것은 수년의 비결 범위를 가지고 있습니다. 마술 따옴표가 원래 존재하지 않은 것보다 본질적으로 나쁜 생각이라면. 시간이 변하고 현재 얼마나 나쁜 아이디어인지를 쉽게 비명을 지르는 반면 , 코드 기반의 기존 동작을 변경하면 엄청난 보안과 이전 버전과의 호환성이 수반됩니다.
Rarst

3

WordPress의 현재 동작은 모든 PHP 시스템 및 구성의 호환성을 기반으로하는 모범 사례입니다. WordPress는 항상 $ _GET, $ _POST, $ _COOKIE 및 $ _SERVER가 슬래시되도록 정규화했으며 계속 그렇게 할 것으로 예상합니다.

따라서 POST 또는 GET 매개 변수를 추출하려면 다음과 같이 작성해야합니다.

$value = stripslashes_deep($_POST['name']); 또는

$value = stripslashes_deep($_GET['name']);


0

Stack Overflow에서 비슷한 질문 으로이 초 전역 배열을 처리하는 솔루션을 작성했습니다.

각 슈퍼 글로벌에 대해 하나의 단일 "액세스 방법"(get / set)을 작성하고 슬래시 및 스트리핑으로 구성됩니다. 예를 들어 다음을 사용합니다.

echo _get('username');    // echo stripslashes_deep($_GET['username']);
_cookie('name', 'value'); // $_COOKIE['name'] = addslashes_deep('value');

이런 식으로 슈퍼 글로벌을 더 이상 엉망으로 만들지 않고 부작용없이 코드에 대해 "로컬"로 작동하는 솔루션을 즐길 수 있습니다. 저에게는 이것이 궁극적 인 해결책이었습니다.


-3

나는 최근 에이 문제를 겪었고 마침내 그것을 알아 냈습니다. 나는 기본적으로 WordPress에서 거의 모든 웹 사이트를 마법의 따옴표로 검색했지만 아무도 도움이되지 않았습니다.

이 문제를 해결하는 방법입니다.

  1. wp-settings.php로 이동하십시오

  2. wp_magic_quotes ()를 검색하십시오.

  3. 의견을 말하면 지금 작동합니다.

이 코드를 살펴보면 다음과 같이 표시되기 때문에 작동합니다.

// Disable magic quotes at runtime. Magic quotes are added using wpdb later in //wp-settings.php.

@ini_set( 'magic_quotes_runtime', 0 );
@ini_set( 'magic_quotes_sybase',  0 );

나중에 wpdb를 사용할 때 추가되는 Magic 인용 부호는 대부분의 사람들을 혼란스럽게 만들고 wp_magic_quotes ()입니다. 그냥 언급하면 ​​마법 따옴표가 엉망이되는 것을 막을 수 있습니다.


6
나쁜 생각 : 다음 업그레이드 후이 변경 내용이 손실됩니다.
fuxia

이것이 나쁜 생각입니다 ™, 그것은 내용을 저장할 때 Magento 문제를주지 않고 WordPress와 Magento를 동시에 실행하는 유일한 솔루션입니다.
forsvunnet 2019

1
많은 플러그인이 잘못 작성되어 SQL을 올바르게 이스케이프하지 않아 사이트가 SQL 주입 공격에 취약해질 수 있기 때문에 이것은 나쁜 생각입니다. $ _GET / $ _ POST에서 stripslashes / stripslashes_deep을 실행하여 올바른 작업을 수행하는 모든 플러그인은 백 슬래시를 제거하여 사용자 입력을 손상시킵니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.