PDO - 连接 - 如何保护

时间:2013-02-05 12:01:16

标签: sql pdo sql-injection

$ _ 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注入吗?

2 个答案:

答案 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