PDO - 连接 - 如何保护
Posted
技术标签:
【中文标题】PDO - 连接 - 如何保护【英文标题】:PDO - connection - how to protect 【发布时间】:2013-01-20 08:28:15 【问题描述】:$_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 注入吗?
【问题讨论】:
【参考方案1】:如果您接受来自表单的输入来创建连接,我可能会在使用之前使用一些清理功能对其进行清理。如果将其存储在文本文件或数据库中,最好在保存之前以及在使用之前进行清理。
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,如果 检测到构成无效字符的字节序列 当前字符集然后整个字符串被拒绝导致 在长度为 0 的字符串中。 http://www.php.net/manual/en/filter.filters.sanitize.php
【讨论】:
【参考方案2】:在任何情况下,连接凭据不应来自用户。 您必须将它们存储在您的服务器中的某个配置文件中。然后与连接字符串一起使用。 请注意,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);
【讨论】:
但它是一个 CMS。管理员有一个表格来放置访问数据。适合他使用安装过程而不是编辑配置文件。以上是关于PDO - 连接 - 如何保护的主要内容,如果未能解决你的问题,请参考以下文章