2013-02-05 192 views
0

$ _pdo = new Data('mysql:host ='。$ db_host。'; dbname ='。$ db_name。'; port ='。$ db_port,$ db_user,$ db_pass,數組(PDO :: MYSQL_ATTR_INIT_COMMAND =>'SET NAMES'。$ charset));PDO - 連接 - 如何保護

變量來自窗體。 如果我不去掉這個變量,用戶可以進行sql注入?

回答

0

如果您接受來自窗體的輸入來創建連接,我可能會在使用它之前使用一些消毒功能來清理它。如果將其存儲在文本文件或數據庫中,在保存之前進行消毒是一個好主意,以及在使用之前。

http://php.net/manual/en/function.filter-var.php

$db_host = filter_var($db_host,FILTER_SANITIZE_FULL_SPECIAL_CHARS); 

相當於調用用htmlspecialchars()設置ENT_QUOTES。通過設置FILTER_FLAG_NO_ENCODE_QUOTES可以禁用編碼 引號。與 htmlspecialchars()類似,此過濾器知道default_charset,並且如果檢測到 構成 中的無效字符的當前字符集,則整個字符串被拒絕,從而導致 爲0長度的字符串。 http://www.php.net/manual/en/filter.filters.sanitize.php

1

連接憑據不應該來自任何情況下的用戶。
您必須將它們存儲在您的服務器中的某個配置文件中。然後使用連接字符串。
請注意,應該在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); 
+0

但它是一個CMS。管理員有一個表單來存取訪問數據。適合他使用安裝過程而不是編輯配置文件。 –