/** * Add slashes to a string or array of strings. * * This should be used when preparing data for core API that expects slashed data. * This should not be used to escape data going directly into an SQL query. * * @since 3.6.0 * * @param string|array $value String or array of strings to slash. * @return string|array Slashed $value */ function wp_slash( $value ) { if ( is_array( $value ) ) { foreach ( $value as $k => $v ) { if ( is_array( $v ) ) { $value[$k] = wp_slash( $v ); } else { $value[$k] = addslashes( $v ); } } } else { $value = addslashes( $value ); } return $value; }
먼저 PHP 내장 함수인 get_magic_quotes_gpc()에 대해 설명하세요
이 함수의 목적은 php.ini 설정에서 Magic_quotes_gpc 옵션의 값을 가져오는 것입니다.
Magic_quotes_gpc 옵션의 값이 On이면 PHP 파서는 post, get 및 cookie의 데이터에 자동으로 이스케이프 문자 ""를 추가하여 이러한 데이터가 프로그램의 특수 문자로 인해 발생하는 치명적인 오류를 일으키지 않도록 합니다. 데이터베이스 진술 실수.
이 켜져 있으면 작은따옴표('), 큰따옴표("), 백슬래시() 및 NUL(NULL 문자)와 같은 문자가 백슬래시로 처리됩니다. 그렇지 않으면 addlashes() <🎜를 사용하여 수동으로 처리해야 합니다. >
Magic_quotes_gpc 값이 On이면 1을 반환하고, 그렇지 않으면 0을 반환합니다
addlashes() 함수는 지정된 미리 정의된 문자 앞에 백슬래시를 추가합니다. 즉, 위에 나열된 캐릭터
if(!function_exists(get_magic_quotes_gpc) || !get_magic_quotes_gpc() )) { foreach(array('_COOKIE', '_POST', '_GET') as $v) { foreach($$v as $kk => $vv) { $kk{0} != '_' && $$v[$kk] = addslashes($vv); } } }
PHP에는 '(작은따옴표), "(큰따옴표), (백슬래시) 및 NULL 문자를 자동으로 변환할 수 있는 세 가지 설정이 있습니다.
PHP는 이를 마법의 따옴표라고 부르는데, 이 세 가지 설정은
magic_quotes_gpc
이 기능을 켜면 GET, POST, COOKIE를 통해 전달된 데이터가 자동으로 이스케이프됩니다.
예: test.php?id=abc'de"f
echo $_GET['id'] # abc'de"f를 얻습니다
Magic_quotes_gpc=On; 이 기능이 켜져 있으면 데이터베이스에 쓰는 데 아무런 영향을 미치지 않습니다. 예를 들어 위의 $_GET['id'] 가 데이터베이스에 기록되면 여전히 abc'de"f 입니다.
하지만 mysql 대신 document에 쓰면. 그러면 abc'de"f가 됩니다
magic_quotes_runtime
magic_quotes_sybase
내 양식 콘텐츠는 원래 다음과 같습니다.
대책 1: php.ini 파일 수정(php.ini 수정 방법은 따로 다루지 않고 구글링하시면 됩니다)
대책 2: 도주 취소
1단계: $_POST['content']와 같이 제출한 데이터를 찾아 $content=stripslashes($_POST['content']);로 변경합니다.
2단계: 앞으로는 $POST['content']를 $content로 바꾸세요
3단계: 데이터베이스에 제출합니다. 데이터베이스 저장 공간은 여전히 정상입니다. 로 다시 발음 (이 문제를 해결하는 방법을 알아야겠죠? 다시 해보시겠어요?)
4단계: Stripslashes()를 사용하여 데이터베이스에서 읽은 콘텐츠를 필터링합니다.
Stripslashes() 이 함수는 addlashes() 함수에 의해 추가된 백슬래시를 제거합니다. 데이터베이스 또는 HTML 양식에서 검색된 데이터를 정리하는 데 사용됩니다
(
PHP 페이지에서 다음과 같은 상황이 발생하는 것을 원하지 않는 경우:
작은따옴표는 '
으로 이스케이프됩니다.
큰따옴표는 "
으로 이스케이프됩니다.
그런 다음 방지하기 위해 다음 설정을 지정할 수 있습니다.
php.ini에 설정: Magic_quotes_gpc = 꺼짐)
1.magic_quotes_gpc=on의 경우,
입출력 데이터베이스의 문자열 데이터로는 아무것도 할 수 없습니다
addlashes() 및 Stripslashes() 작업의 경우 데이터가 정상적으로 표시됩니다.
그런 다음 출력 시 초과 백슬래시를 제거하려면 Stripslashes()를 사용해야 합니다.
2.magic_quotes_gpc=off인 경우
입력 데이터를 처리하려면 addlashes()를 사용해야 하지만, 출력 형식을 지정하기 위해 Stripslashes()를 사용할 필요는 없습니다.
addlashes()는 백슬래시를 데이터베이스에 기록하지 않기 때문에 mysql이 sql 문의 실행을 완료하는 데만 도움이 됩니다.