我即将启动我的网站,安全性非常重要,所以我想概述一下我为保护网站所做的工作。如果我错了,如果我还需要别的东西,请纠正我:
使用md5加密存储密码。
Sample insert query:
// I use these on every page
$username = removeBadChars($_SESSION["username"]);
$password = removeBadChars($_SESSION["password"]);
//Sanitized data
$_SESSION["username"] = $username;
$_SESSION["password"] = $password;
//Query to display
$sql = "select `User_name`, `User_id`, `User_kind` from `clientele`
where `username` = '$username' AND `password`='$password'";
$query = mysql_query($sql) or die ("Error: ".mysql_error());
while ($row = mysql_fetch_array($query)){
$name = htmlspecialchars($row['User_name']);
$uid = htmlspecialchars($row['User_id']);
$uis = htmlspecialchars($row['User_kind']);
}
mysql_free_result($query);
//Insert Query
$title = mysql_real_escape_string($_POST['title']);
$comment = mysql_real_escape_string($_POST['comment']);
$insert = "INSERT INTO table (Title, Comment)
VALUES ('".$title."', '".$comment."')";
$query = mysql_query($insert) or die ("Error: ".mysql_error());
答案 0 :(得分:2)
sha256
)MySQLi
)代替,以避免在将数据输入数据库之前忘记转义数据<span title="FULLNAME">
),因为需要额外的转义(引号,空格,如果不使用引号等)注意:此列表并非详尽无遗。它只列出了我注意到你提供的短片段的错误。
答案 1 :(得分:-1)
为了安全起见,您应该使用PDO或mysqli_
functions并跳过旧学校mysql_
垃圾,它不再被开发。以下是如何使用PDO:
$pdo = new PDO('mysql:host=localhost;dbname=whatever', $username, $password);
$statement = $pdo->prepare('select `User_name`, `User_id`, `User_kind` from `users`
where `username` = :user AND `password`= AES_ENCRYPT(:pass,:user)');
$statement->bindParam(':user', $_GET['user']);
$statement->bindParam(':pass', $_GET['pass']);
$results = $statement->execute();
var_dump($results->fetchAll());
参数更安全,因为当你bindParam
它自动验证时。其他人已经提到使用md5
散列,但是它们有很多databases for "decoding"以及彩虹表攻击,所以它们不是很安全。这里我使用mysql的AES_ENCRYPT
作为密码,并使用用户名作为演示目的的密钥,你可能想要生成自己的密钥并将其存储在某个地方,因为你可以AES_DECRYPT
与那......你应该检查出更好的加密库,比如scrypt。
无论你做什么,都不要使用addslashes()
it's insecure
最重要的是,您应该考虑以其他方式保护服务器的操作系统和Apache,例如不要宣传版本号和运行apache,因为它是自己的用户等。查看the Open Web Security Project website以获取大量安全信息。< / p>