Php 在基于用户输入创建mysqli连接时,我是否必须净化提交表单数据?

Php 在基于用户输入创建mysqli连接时,我是否必须净化提交表单数据?,php,mysql,security,mysqli,Php,Mysql,Security,Mysqli,我正在尝试为我的客户端编写一个php安装程序来安装我的php程序。我的意思是,我的客户端可以运行domain.com/myscript/install/index.php,输入数据库名称、密码主机名等,一旦提交表单,我的安装程序脚本将根据用户的输入连接到mySQL数据库,然后创建一些表等 即 所以,我想知道在这种情况下,是否有必要净化$\u POST?始终清理用户输入,不管发生什么。此时您不需要mysqli\u real\u escape\u字符串,该函数仅对某些字符进行转义,以便安全地插入到表

我正在尝试为我的客户端编写一个php安装程序来安装我的php程序。我的意思是,我的客户端可以运行domain.com/myscript/install/index.php,输入数据库名称、密码主机名等,一旦提交表单,我的安装程序脚本将根据用户的输入连接到mySQL数据库,然后创建一些表等


所以,我想知道在这种情况下,是否有必要净化$\u POST?

始终清理用户输入,不管发生什么。此时您不需要mysqli\u real\u escape\u字符串,该函数仅对某些字符进行转义,以便安全地插入到表中。绝对不是你现在需要的。使用


因为您正在处理SQL,所以不会按照传统的方式来处理。相反,您需要确保它符合MySQL接口选项。换言之,“127.0.0.1;“从用户中删除”不会造成问题,但也不会创建有效连接。

是!这对一个人来说是个好主意,你不知道如何利用它,所以不要假设。净化用户输入的数据始终是个好主意,即使你认为只有可信的用户才会使用它。我想知道我应该使用哪个php函数,因为此时我不能使用mysqli\u real\u escape\u string我必须调用filter\u var吗?您可以对每个变量使用filter\u var,如上面直接显示的'filter\u input\u array函数。
$mysqli = new mysqli($_POST['hostname'],$_POST['username'],$_POST['password'],$_POST['port']);
<?php

$sanitize_string = array(
  'filter' => FILTER_SANITIZE_STRING,
  'flags'  => FILTER_REQUIRE_SCALAR | FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH,
);

$user_input = filter_input_array(
  INPUT_POST,
  'hostname' => $sanitize_string, // You could also use the IP one, check for persistent, ...
  'username' => $sanitize_string,
  'password' => FILTER_UNSAFE_RAW, // It's going to be hashed, who cares!
  'port'     => array(
     'filter' => FILTER_VALIDATE_INT,
     'flags'  => FILTER_REQUIRE_SCALAR,
     'options' => array('min_range' => 666, 'max_range' => 3600),
   ),
   true
);

foreach ($user_input as $input) {
  if (!$input) { // Either NULL or FALSE, we don't care!
    trigger_error("No no my dear!", E_USER_ERROR);
  }
}

list($host, $user, $pass, $port) = $user_input;
$mysqli = new \mysqli($host, $user, $pass, $port);

?>