覆盖$ _POST内容

时间:2015-04-09 13:33:07

标签: php post sanitization

我的问题是如何在PHP中直接覆盖POST / GET或$ _REQUEST值。我见过的大多数脚本,只需将一个变量分配给POST键,并用它做所需的东西。

我只需要清理输入,但我的条件是:我不必为它使用变量。例如:

$_POST['name'] = "Example's";

但是,我需要将此POST值覆盖为:

$_POST['name'] = 'Example\'s';

但是,没有赋值变量。在这个过程中,我直接需要编辑POST键的值。我尝试创建一个循环,然后在其中进行过滤,但这对我没有帮助。

任何想法,如何让这个运行?如果我不清楚,我很抱歉。

3 个答案:

答案 0 :(得分:2)

您不应该直接访问全局变量,而应该使用filter_input()之类的过滤器函数: $sanitized_var = filter_input(INPUT_POST, 'var_name', FILTER_SANITIZE_SPECIAL_CHARS)

答案 1 :(得分:1)

您可以尝试转义每个$_POST值,如下所示:

$data= array_map(
  function($element) { return htmlspecialchars($element, ENT_QUOTES, 'utf-8'); },
  $_POST
);

答案 2 :(得分:1)

好的,找到了解决办法。

意识到它很简单:

function cleanInput($input) {

  $search = array(
    '@<script[^>]*?>.*?</script>@si',  
    '@<[\/\!]*?[^<>]*?>@si',           
    '@<style[^>]*?>.*?</style>@siU',   
    '@<![\s\S]*?--[ \t\n\r]*>@'       
  );

    $output = preg_replace($search, '', $input);
    return $output;
}

foreach ($_POST as $key => $value) {
   $_POST[$key] = mysqli_real_escape_string($con,cleanInput($value));
}