$ _ pdo = new Data('mysql:host ='。$ db_host。'; dbname ='。$ db_name。'; port ='。$ db_port,$ db_user,$ db_pass,array(PDO :: MYSQL_ATTR_INIT_COMMAND = >'SET NAMES'。$ charset));
变量来自形式。 如果我不删除这些变量,用户可以进行SQL注入吗?
答案 0 :(得分:1)
在任何情况下,连接凭据都不应来自用户
您必须将它们存储在服务器中的某个配置文件中。然后使用连接字符串。
请注意,charset应该在DSN中设置,而不是选项。
include 'settings.php';
$dsn = "mysql:host=$db_host;dbname=$db_name;port=$db_port;charset=$charset";
$pdo = new Data($dsn, $db_user, $db_pass);
答案 1 :(得分:0)
如果您接受表单中的输入来创建连接,我可能会在使用之前使用一些清理功能来清理它。如果将其存储在文本文件或数据库中,最好在保存之前进行清理,然后再使用它。
http://php.net/manual/en/function.filter-var.php
$db_host = filter_var($db_host,FILTER_SANITIZE_FULL_SPECIAL_CHARS);
相当于使用ENT_QUOTES设置调用htmlspecialchars()。编码 可以通过设置FILTER_FLAG_NO_ENCODE_QUOTES来禁用引号。喜欢 htmlspecialchars(),这个过滤器知道default_charset和if 检测到一个字节序列,构成一个无效字符 当前字符集然后拒绝整个字符串 在一个0长度的字符串中。 http://www.php.net/manual/en/filter.filters.sanitize.php