【问题标题】:stripslashes security testingstripslashes 安全测试
【发布时间】:2013-03-29 11:36:57
【问题描述】:

我正在测试使用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() 是否安全?

【问题讨论】:

标签: php stripslashes


【解决方案1】:

你在这里问了两个问题:

关于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>

您得到的结果表明存在编码问题。

【讨论】:

    猜你喜欢
    • 2023-04-07
    • 1970-01-01
    • 2012-09-30
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    相关资源
    最近更新 更多