考慮一個項目,將工作一個以上的開發,並且將得到不斷的更新和維護,這兩個代碼是什麼下文可以被認爲是PHP的最佳實踐,考慮可讀性和安全?如果我們在表演中談話,the second option will probably be a little better,但有辦法解決這一點。
選項1
$user = $_POST['user'];
$pass = $_POST['pass'];
// Prevent SQL Injection and XSS
$user = anti_injection($user);
$pass = anti_injection($pass);
if(strlen($user) <= 8 && strlen($pass) <= 12)
{
// SQL query
$sql = "SELECT id
FROM users
WHERE username = '$user' AND password = '$pass';";
}
選項2
// Retrieve POST variables and prevent SQL Injection and XSS
$_POST['user'] = anti_injection($_POST['user']);
$_POST['pass'] = anti_injection($_POST['pass']);
if(strlen($_POST['user']) <= 8 && strlen($_POST['pass']) <= 12)
{
// SQL query
$sql = "SELECT id
FROM users
WHERE username = '" . $_POST['user']. "' AND password = '" . $_POST['pass'] . "';";
}
編輯1
我不使用MySQL,我的數據庫是PostgreSQL的
如果您對安全感興趣,爲什麼不使用綁定參數? – andrewsi 2012-07-13 14:46:42
這兩個實際上是一樣的,但看起來很醜,但我是一個瘋狂的編碼器,我抽象和做的東西有點過於邊緣一段時間... – 2012-07-13 14:49:10
我總是會使用第一個選項,如果只是爲了確保我永遠不要忘記在值上調用'anti_injection'。第二個選項不知何故神奇地推斷它正在發生,但你永遠無法確定。另外,我會確定第一個更快,因爲數組訪問速度可能比訪問變量慢 - 您確定性能嗎? – poke 2012-07-13 14:50:17