programing

$wpdb->update 또는 $wpdb->insert 결과 슬래시가 따옴표 앞에 추가됩니다.

powerit 2023. 3. 19. 19:32
반응형

$wpdb->update 또는 $wpdb->insert 결과 슬래시가 따옴표 앞에 추가됩니다.

이 질문은 여러 곳에서 여러 번 제기되었지만, 저는 명확하고 명확한 답을 찾지 못했습니다.대부분의 솔루션에는 php.ini 파일에서 Magic Quotes를 비활성화하도록 지시하거나 핵심 WP 파일을 수정하는 작업이 포함됩니다.

문제는 $wpdb->insert 또는 $wpdb->update를 사용할 때마다 단일 따옴표 앞에 슬래시가 추가되는 것입니다.예를 들어 다음과 같습니다.

딸기를 먹어서 딸기를 먹었다

사용한 샘플 코드는 다음과 같습니다.

$id = $_POST['id'];
$title = $_POST['title'];
$message = $_POST['message'];

$wpdb->update('table_name', array('id'=>$id, 'title'=>$title, 'message'=>$message), array('id'=>$id))

Wordpress Database Output - SQL Injection Escape를 제거했지만 "매직 따옴표 사용 안 함" 외에는 해결하지 못했습니다.

이에 하루를 보낸 후, 그 대답은 다음과 같습니다.

워드프레스는 실제 삽입이 아닌 $_POST 선언으로 빠져나갑니다.이상합니다.

$id = stripslashes_deep($_POST['id']); //added stripslashes_deep which removes WP escaping.
$title = stripslashes_deep($_POST['title']);
$message = stripslashes_deep($_POST['message']);

$wpdb->update('table_name', array('id'=>$id, 'title'=>$title, 'message'=>$message), array('id'=>$id));

이렇게 하면 WP가 인용문 앞에 슬래시를 추가하지 않습니다.

조금 더 자세한 정보--WordPress는 버전 3.0부터 WordPress를 끄더라도 '매직인용'을 추가함으로써 사람들이 미쳐가고 있다고 생각하게 만들기로 결정했습니다.$_REQUEST, $_GET, $_POST, $_COOKIE 또는 $_SERVER에 대한 모든 액세스가 영향을 받습니다.wp-includes/load.php.

 /* Add magic quotes to $_GET, $_POST, $_COOKIE, and $_SERVER.
 * @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 );
}

WordPress는 내장된 php 매직 따옴표 설정과 get_magic_quotes_gp() 값을 무시하고 항상 매직 따옴표를 추가합니다(5.4에서 기능이 삭제된 후에도).

대신 이것을 사용할 수 있습니다.

//replace $_POST with $POST
$POST      = array_map( 'stripslashes_deep', $_POST);
$wpdb->insert( 
        'wp_mytable', 
        array( 
            'field_name'        => $POST['field_name'], 
            'type'              => $POST['type'],
            'values'            => serialize($POST['values']),
            'unanswered_link'   => $POST['unanswered_link'], 
        ), 
        array( 
            '%s','%s','%s','%s'
        ) 
    );

WordPress는 너무 많은 코어 코드와 플러그인 코드가 따옴표에 의존하기 때문에 이 작업을 수행합니다.따라서 슈퍼글로벌에 대한 따옴표를 비활성화하면 (위의 "Basic 예제"와 "Good Coding Practice"의 예에서와 같이) 보안에 구멍이 생길 수 있습니다.

http://codex.wordpress.org/Function_Reference/stripslashes_deep

언급URL : https://stackoverflow.com/questions/7341942/wpdb-update-or-wpdb-insert-results-in-slashes-being-added-in-front-of-quotes

반응형