我有一些非常奇怪的事情发生在这里。我正在使用CodeIgniter构建一个API,它使用通过CURL发布到它的数据。
WordPress网站正在向CodeIgniter API发布信息,除了密码输入字段发布包含@的字符串之外,所有这些信息都有效。
我马上将其归结为XSS保护,但这是禁用的。我没有得到CURL错误,并且CodeIgniter方法没有收到数据(但是当没有@时)。
我已经尝试了一切,谷歌搜索无效,尝试使用htmlentities(),没有任何运气。
我已经尝试在将数据传递给CURL之前打印$ _POST ['fieldname']并将其打印回来(即使包含'@'),并且在codeIgniter端调试,我试过了除非发送的数据包含@,否则返回发送数据的方法。在我的whits结束时,尝试使用我的REST客户端测试codeIgniter API,并且在使用@发送字符串时奇怪地工作正常,所以我猜测CURL命令有问题吗?
提前致谢。 Ste
- 编辑:代码 -
/* WORDPRESS SITE */
// ....
// When $_POST['pass'] doesn't contain '@' it passes data fine,
// print $_POST['pass'] works too even with an '@'...
// ...also tried htmlentities($_POST['pass']) with no luck
$data_to_post = array('pass' => $_POST['pass'], 'user' => $_POST['user']);
$result = do_api_call('return_posted_values', $data_to_post);
// ....
function do_api_call($method, $request = array()) {
$ch = curl_init(API_URL.$method);
// Add the api key to the request
$request['api_key'] = API_KEY;
foreach ($request as $key => $value) {
// Serialize any arrays
if (is_array($value)) $request[$key] = serialize($value);
}
// Set the curl
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
$status = curl_getinfo($ch);
curl_close($ch);
//print $result;
$result = json_decode($result);
return $result;
}
/* CODEIGNITER SIDE */
/* THIS METHOD IS IN API CLASS */
public function return_posted_values() {
// Return the posted data as string works fine when the data has no @
$return $this->input->post('user').' - '.$this->input->post('pass');
$this->response($return);
}
答案 0 :(得分:0)
在密码中用@ 40替换@。或使用 urlencode()功能覆盖密码以逃避这些字符。