我正在测试使用 stripslashes()
我尝试了以下方法:
$str = chr(0xbf) . chr(0x27);
var_dump(stripslashes($str)); // string(2) " �' "
然后我把它改成这样:
$str = $_POST['input']; // %bf%27;
var_dump(stripslashes($str)); // string(3) " �'' "
然后我使用 curl 发送 input
数据:
curl_setopt($ch, CURLOPT_POSTFIELDS, 'input=' . chr(0xbf) . chr(0x27));
但结果还是:string(3) "�'' "
当从另一台服务器接收数据时,是否有可能获得第一个示例中的结果?使用 stripslashes()
会安全吗?
最佳答案
你在这里问了两个问题:
关于stripslashes的安全性
stripslashes()
并不是一种真正安全的处理输入的方式(我假设是进入数据库)。涉及的变数太多,比如
- 目标数据库系统
- 数据库连接编码
- 容易遗漏的程序员错误
关于接收 POST 数据
尝试以下文件。它应该作为您正在调查的内容的基本测试用例。到目前为止,我无法重现您描述的问题。
test.php
<html>
<head></head>
<body>
<form method="POST" action="test.php">
<input type="text" name="input"></input>
<input type="submit" value="Submit"></input>
</form>
<?php
$string = chr(0xbf) . chr(0x27); // yields string '¿'' (length=2)
$input = $_POST['input'];
foreach (array($string, $input) as $s) {
var_dump(stripslashes($s));
var_dump($s);
}
?>
</html>
您得到的结果强烈指向编码问题。
关于php - stripslashes 安全测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15861296/