$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
'programing' 카테고리의 다른 글
Oracle SQL Developer가 DB 연결을 닫지 않도록 하려면 어떻게 해야 합니까? (0) | 2023.03.19 |
---|---|
워드프레스 개수 위젯 (0) | 2023.03.19 |
Angular에서 "config"에 "$window" 객체를 "injection"하는 방법JS (0) | 2023.03.19 |
WordPress에서 쿠키를 설정, 입수 및 파기하려면 어떻게 해야 합니까? (0) | 2023.03.19 |
Java loop over Json 어레이? (0) | 2023.03.19 |