다른 사람의 PHP 코드를 한 번 리뷰 한 다음 모든 GET 및 POST 변수를 하나의 일반 오래된 객체로 롤백 한 함수 또는 클래스 메소드가 있음을 상기합니다. 돌아 다니다. 동일한 이름 - 값 쌍이 GET과 POST에 모두 나타나면 POST가 이길 것입니다.GET 또는 POST에 관계없이 외부 변수를 단일 객체로 조합하는 PHP 함수
잘 코딩 된 PHP 애드온이 있습니까?
다른 사람의 PHP 코드를 한 번 리뷰 한 다음 모든 GET 및 POST 변수를 하나의 일반 오래된 객체로 롤백 한 함수 또는 클래스 메소드가 있음을 상기합니다. 돌아 다니다. 동일한 이름 - 값 쌍이 GET과 POST에 모두 나타나면 POST가 이길 것입니다.GET 또는 POST에 관계없이 외부 변수를 단일 객체로 조합하는 PHP 함수
잘 코딩 된 PHP 애드온이 있습니까?
당신은 $_REQUEST
를 사용하지만 $_GET
, $_POST
및 $_COOKIE
의 내용을 포함하고 있음을 인식하고,이 자동 전역 변수의 (목적 덮어 쓰기 및 순서) 존재는 실행 환경에서 구성 될 수 있다고 할 수있다.
이 문제를 일으키는 경우, 간단한 버전을 출시하는 것이 좋습니다 수 있습니다, 요점은 어느 것 당신은 다음 몇 가지 방식으로이 문제를 마무리 할 수
$requestData = array_merge($_GET, $_POST);
같은, 아마도 제공 추가적인 유용한 기능, 예. 자동 magic_quotes
를 사용하여 망가 값으로 stripslashes()
을 적용 실종 변수에 대한 디폴트 값을 제공하는 등
전역 변수 $ _REQUEST를 사용할 수 있습니다. PHP를 사용하여 웹 기반 응용 프로그램을 작성할 때 응용 프로그램이 웹 sapi (예 : CGI 또는 웹 서버 모듈)에서 실행될 때 기본적으로 해석되는 PHP에 의해 정의됩니다. $ _REQUEST는 $ _GET 및 $ _POST에있는 모든 데이터의 연관 배열이며 기본적으로 정의됩니다. 그것을 사용하기 위해서는 확장/라이브러리가 필요하지 않습니다.
나는 그것이 나쁜 관행 $_POST
와 $_GET
을 conflate 생각 것입니다. 그것들은 완전히 다른 것들을위한 것이며, 그것들을 동등하게 취급함으로써, 당신은 효과적으로 HTTP 프로토콜을 오용하고 있습니다. 언급 한 바와 같이 $_REQUEST
은 원하는대로 처리하지만 예측할 수는 없습니다. 동일한 작업을 수행하기 위해 자신의 전역 함수를 쉽게 작성할 수 있습니다.
function param($name, $default = null) {
return isset($_POST[$name])
? $_POST[$name]
: (isset($_GET[$name])
? $_GET[$name]
: $default);
}
하지만 실제로는 나쁜 습관입니다.
동의합니다. POST 요청이 데이터를 업데이트하거나 삭제할 수있는 반면, GET 요청에는 부작용이 없어야합니다. OP의 전략은 해당 구별을 지 웁니다. 즉, 예를 들어 웹 스파이더가 사이트의 링크를 체크 아웃하면 일부 데이터가 삭제 될 수 있습니다. –
이 프레임 워크는 앱 전체에서 전역을 처리하는 클래스입니다. 여기서 변수의 처리가 수행되지 않습니다.
class stGlobal
{
//instance
private static $instance;
//global settings
public $post = '';
public $get = '';
public $files = '';
public $request = '';
private function initialize()
{
$this->post = $_POST;
$this->get = $_GET;
$this->files = $_FILES;
$this->request = $_REQUEST;
}
public function getInstance()
{
if (!isset(self::$instance))
{
$class = __CLASS__;
self::$instance = new $class();
self::$instance->initialize();
}
return self::$instance;
}
}
가 보안 결함을 일으킬 수 있습니다 어디서나
$myObj = stGlobal::getInstance();
두 변수를 병합 (또는 대신 $_REQUEST
또는 Register Globals를 사용)를 사용하기 위해 당신의 definetly 할 수 없습니다 그 값의 근원을 확인하라. 따라서 $_REQUEST['foobar']
에 액세스 할 때 값이 URL, POST 본문 또는 쿠키를 통해 전송되었는지 확인할 수 없습니다. 이로 인해 Cross-Site Request Forgery의 스크립트가 취약해질 수 있습니다.
그래서 안심할 수 있도록 보안을 유지하고 가치가 기대되는 변수를 사용하는 것이 좋습니다. $_GET
은 URL을 통해 전달되어야하며, POST를 통해 전달되는 쿠키는 $_POST
이고 쿠키는 $_COOKIE
입니다.
크로스 사이트 요청 위조 취약점은 응용 프로그램이 다양한 사용자 입력 벡터에 다양한 수준의 트러스트를 배치하는 경우에만 문제가됩니다. 최대한의 보안을 위해 * 모든 사용자 입력 벡터는 본질적으로 신뢰할 수없는 것으로 간주되어야합니다. 이 사실을 감안할 때 변수를 병합하는 것은 신뢰할 수있는 단일 사용자 입력 벡터의 부당한 가정을 지우므로 실제로 더 안전하다고 주장 할 수 있습니다. – dreftymac
기본적으로 $ _REQUEST에는 쿠키 데이터도 포함되어 있으며 구성에 따라 예기치 않은 순서 재 지정이 필요할 수 있습니다. – Rob