【发布时间】:2014-03-08 17:31:11
【问题描述】:
社交网站是否应允许在用户名和密码中使用 UTF-8?我对 PHP 真的很陌生,我想知道这样的事情。我现在正在创建一个小测试项目,并将排序规则设置为utf8_general_ci 和SET NAMES utf8。使用“ÅÄÖ”等字符正确插入和显示所有内容。但如果用户名或密码中包含这些字符,您将无法登录。为什么?
<?php
if(isset($_POST['loginBtn'])){
//variables
$username = mb_strtolower(strip_tags(addslashes($_POST['username'])));
$password = strip_tags(addslashes($_POST['password']));
if(empty($username) || empty($password)){
$statusM = "Var god och fyll i båda fälten!";
}else{
//$password = hash("sha512", $password);
include("db.php");
//the db.php contains the character set and collation set
$sql = 'SELECT username, password FROM users WHERE username=:username AND password=:password';
$stmt = $db->prepare($sql);
$stmt->bindParam(":username", $username);
$stmt->bindParam(":password", $password);
$stmt->execute();
if(!$stmt->rowCount() > 0){
$statusM = "Antingen fel lösenord eller användarnamn!";
}else{
$sql = 'SELECT * FROM users WHERE username=:username AND password=:password';
$stmt = $db->prepare($sql);
$stmt->bindParam(":username", $username);
$stmt->bindParam(":password", $password);
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$row = $stmt->fetch();
session_start();
$_SESSION['school'] = $row['school'];
$_SESSION['firstname'] = $row['firstname'];
$_SESSION['lastname'] = $row['lastname'];
$_SESSION['username'] = $row['username'];
$_SESSION['password'] = $row['password'];
$_SESSION['email'] = $row['email'];
header("Location: member_home.php");
exit();
}
}
}
?>
注意,这是我当前的代码,尚未完成,并且该网站是瑞典语。
【问题讨论】:
-
当然应该,但是没有看到你的代码,我们不能说为什么它不适合你
-
应该吗?当然,它允许您的用户增加密码字符范围,从而提高安全性。
-
1. 从不使用
addslashes2. 使用准备好的语句时不需要strip_tags3. 当$_POST['loginBtn']设置时,$_POST['username']和$_POST['password']仍然可以不设置 4. 仅散列使用 SHA512 的密码是不够的;始终使用strong password hashing algorithm -
好的,谢谢你的提示!
-
顺便说一句,你为什么要两次获取相同的信息?首先,您只要求输入用户名和密码,然后立即丢弃该信息,然后再次要求所有信息:这是非常多余的代码。