这只是它的一部分,但它首先进行连接,然后检查用户名是否存在,然后将数据插入表中。 我对PHP并不是很了解,所以没有必要对我进行攻击。试图在这里学习,我想知道我是否在正确的轨道上。此PHP代码对于登录系统看起来是否安全?
require("constants.php");
try {
$DBH = new PDO("mysql:host=$host;dbname=$dbname", $dbconnect, $dbpass);
$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e) {
echo "sorry, something happened. try going back and try again.";
file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
}
function checkName(){
$STH = $DBH->query('SELECT username FROM users WHERE username = $username');
$STH->setFetchMode(PDO::FETCH_OBJ);
while($row = $STH->fetch()) {
if($username != $row->username){
$check = 1;
}
else{
$check = 0;
}
return $check;
}
function createSalt()
{
$string = md5(uniqid(rand(), true));
return substr($string, 0, 3);
}
function register(){
$check = checkName();
if($check == 1){
$salt = createSalt();
$hash = sha1($salt . $hash);
$data = array($username, $hash, $salt, $ip);
$STH = $DBH->("INSERT INTO users (username, password, salt, ip) values (?, ?, ?)");
$STH->execute($data);
}
}
而不是通过数据库中的所有用户循环检查是否采取'用户名',我只是'SELECT ID FROM用户WHERE用户名= $用户名',如果返回结果,你知道它已被采取。 – stealthyninja 2010-12-15 05:47:51
关于编写登录系统,“我对PHP的了解不多”,这就是为什么那些新开发的软件不应该编写登录系统的原因。编写登录系统是一个充满安全隐患的话题,只有一位经验丰富的软件开发人员才能真正理解。新程序员不仅要学习编程语言的基础知识,还必须同时理解复杂的安全问题。新程序员应该使用别人写的系统,他们实际上知道自己在做什么(例如Barebones SSO)。 – CubicleSoft 2015-05-05 14:03:22