>  기사  >  백엔드 개발  >  내 AJAX POST 변수가 프로덕션 서버에서는 이스케이프되지만 로컬 서버에서는 이스케이프되지 않는 이유는 무엇입니까?

내 AJAX POST 변수가 프로덕션 서버에서는 이스케이프되지만 로컬 서버에서는 이스케이프되지 않는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-26 13:32:03514검색

Why are My AJAX POST Variables Escaped on the Production Server But Not on the Local Server?

PHP에서 $_POST 변수가 이스케이프되는 이유는 무엇입니까?

문제:

PHP에서 $_POST 변수는 AJAX POST 요청은 프로덕션 서버에서 이스케이프되지만 로컬 서버에서는 그대로 유지됩니다. 로컬 서버는 Windows에서 PHP 5.3.1을 실행하고, 프로덕션 서버는 Linux에서 PHP 5.2.12를 실행합니다.

이유:

두 서버 간의 불일치는 다음과 같습니다. 프로덕션 서버에서 마법 따옴표를 사용했기 때문일 수 있습니다.

마법 따옴표:

마법 따옴표는 $_GET의 특정 문자를 자동으로 이스케이프하는 PHP의 더 이상 사용되지 않는 기능입니다. , $_POST 및 $_COOKIE 변수를 사용하여 SQL 주입 및 기타 공격으로부터 보호합니다. 이스케이프 문자에는 다음이 포함됩니다.

  • 작은따옴표(')
  • 큰따옴표(")
  • 백슬래시()
  • NUL 문자

해결책:

문제를 해결하고 두 서버 모두에서 일관된 동작을 보장하려면 프로덕션 서버에서 매직 따옴표를 비활성화할 수 있습니다. 전역적으로 php.ini에서 또는 set_magic_quotes_runtime()을 사용하여 스크립트별로 실행합니다.

마법 따옴표를 비활성화할 수 없는 경우 가져오는 POST 데이터에서 Stripslashes() 함수를 사용하여 슬래시를 수동으로 제거할 수 있습니다.

<code class="php">if (get_magic_quotes_gpc()) {
    $my_post_var = stripslashes($_POST["my_post_var"]);
}</code>

매직 따옴표를 적절하게 비활성화하거나 처리하면 $_POST 변수가 프로덕션 서버에서 이스케이프되지 않도록 하여 AJAX POST 요청이 올바르게 작동하도록 할 수 있습니다.

위 내용은 내 AJAX POST 변수가 프로덕션 서버에서는 이스케이프되지만 로컬 서버에서는 이스케이프되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.