쿼리 문자열을 PHP 스크립트에 전달하고 있습니다. 일종의 이런parse_str 키에 세미콜론을 임의로 추가합니다.
는 :
$.post('/url', {
id: postID
filters: $('#form').serialize()
});
그런 다음 내 PHP에서, 나는
filters
을 읽을 수
parse_str
를 사용
<?php
$postID = $this->input->post('id');
parse_str($this->input->post('filters'), $filters);
문제는 parse_str
이 키에 무작위로 ;
의 추가된다는 점이다.
array(4) {
["users"]=>
string(0) ""
["companies;"]=>
string(0) ""
["pref;_123"]=>
string(0) ""
["products;"]=>
array(2) {
[0]=>
string(4) "1234"
[1]=>
string(4) "5678"
}
}
왜 서버가 ;
를 추가 :이 같은 결과를 받고 있어요? 나는 다른 서버에서 그것을 시도했지만 이것은 일어나지 않습니다. CLI를 통해 테스트 할 때도 발생하지 않습니다.
편집 : 이것은 parse_str
의 결함이 아니지만 XSS 필터 일종의 것으로 보입니다. $this->input->post('filters')
(심지어 $_POST['filters']
!)에는 ;
문자가 포함되어 있습니다. 나는 체크했고, jQuery는 그것들을 추가하지 않았다.
편집 : 나는 수행하여이 문제를 "해결"관리는 :
$filters = array_combine(array_map(function($x){
return str_replace(';', '', $x);
}, array_keys($filters)), array_values($filters));
나는 무엇이 들어오는 지 알아보기 위해 $ 필터 중 var_dump를 먼저 수행 할 것입니다. –
Ajax 요청에 이상한 점이 있습니까? 또는 문제는 PHP에서만 발생합니까? 'parse_str ("users = & companies = ...")'와 같은 정적 문자열을 사용하여 문제를 재현 할 수 있습니까? – Tchoupi
Hmm :'$ this-> input-> post ('filters')'는';'문자를 포함하고있는 것처럼 보입니다. 'parse_str'의 잘못이 아닌 것 같습니다. –