php - stripslashes 安全测试

标签 php stripslashes

我正在测试使用 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/

相关文章:

php - 使用 "safe way to input data to mysql using PHP"插入数据的问题

php - Symfony - 在表单类中将 HTML5 输入类型 "text"更改为 "number"

php - 一对多链接表导致返回重复行

php - 不能将 X 用作 Y,因为该名称已被使用,即使它不是

php - 使用 php 的 preg 替换从字符串中删除反斜杠\

php - 将十六进制数据从 PHP 传递到外部程序

php - Propel ORM - 连接不相关的表

php - 输入的数字与数据库中旧数字的总和

php - 删除MYSQL中的一堆转义引号

regex - 如何将反斜杠添加到get_option()