我使用php进行基本应用程序登录系统,能够编辑帐户信息,删除帐户.我有一个mysql数据库.我需要使用salt加密/解密密码.我该怎么做?只需要确保数据安全.
我正在研究一个可能被sql注入的项目(一个用户报告了它).
以下是登录脚本的一部分:
$loginemail = $_POST['loginemail'];
$loginemail_sql = mysql_real_escape_string($loginemail);
$password = $_POST['loginpass'];
$password_sql = mysql_real_escape_string($password);
//get user data
$q = 'SELECT uid, full_name, score, status FROM users WHERE email="'.$loginemail.'" AND password="'.$password_sql.'" LIMIT 1';
Run Code Online (Sandbox Code Playgroud)
我想现在,如果这是可以注入的代码的一部分?是否存在$ loginemail和$ password被错误处理并且可能包含一些dangerouse"SQL部分"的问题?
我想创建一个函数,如果对帐户进行多次强力尝试,它将提醒用户.如果字符串匹配超过75%,该函数将提醒用户.我执行了这个:
function Password_Match ($String, $Stored_Password){
$New_String = str_split($String);
$New_Stored_Password = str_split($Stored_Password);
$Match = 0;
foreach ($New_String AS $Value){
if (in_array($Value,$New_Stored_Password)){
$Match++;
}
}
return $Match;
}
$String = "Test";
$Pass = "Tesst";
echo Password_Match($String,$Pass);
Run Code Online (Sandbox Code Playgroud)
这返回4,但我的代码中显然存在一个缺陷,我无法找到解决方案.承诺将是辉煌的.
我正在使用PHP.我想要一个安全快速的密码加密系统.散列密码一百万次可能更安全,但也更慢.如何在速度和安全性之间取得良好的平衡?我想知道php中最好的加密方法以及如何应用它.
我需要检查是否$user_entered_pass与$hash_val. 请帮我?
<?php
$mypass = "Rainbow";
$hash_val = md5($mypass);
echo $hash_val; //always 32 characters
$user_entered_pass = "rainbow";
?>
Run Code Online (Sandbox Code Playgroud) 我正在尝试为开发中的站点考虑我的用户身份验证系统,并已阅读堆栈溢出和其他地方的许多帖子以了解我的想法.我找到了几个选项,我想知道这个看起来是不错的起点:
http://php.about.com/od/finishedphp1/ss/php_login_code_6.htm
它似乎加密密码,避免一些明显的陷阱.
此外,也许是一个愚蠢的问题,但我想使用身份验证有两个原因:1.在其他公共页面上为用户提供一些额外的功能.(想一想页面顶部的"Hello [username]").
2.还提供用户访问私人页面的权限.
这两种类型的应用程序(登录=在公共页面上添加的东西而不是登录=访问私有页面)依赖于相同的身份验证,对吧?
换句话说,无论我是想做其中一个还是两个都不应该影响我对身份验证的看法,对吗?
如果我通过使用about.com教程来解决问题,请告诉我....
提前致谢.
关注编辑:好的,所以about.com教程有一些漏洞.我发现下面有一个更完整的系统似乎使用SHA1加密.这也有新用户的电子邮件验证和一些其他不错的功能.乍一看,这看起来像是一条可靠的路线吗?
http://www.unlimitedtree.com/topic/1503-tutadvanced-login-member-system-php-tutorial/
可能重复:
PHP密码的安全散列和盐
为了加密php文件中的密码,我想更改为sha256或md5,而不是使用sha1作为iIwent进行在线研究,他们说sha1不是那么安全.
如何更改php文件?
<?php
class DB_Functions {
private $db;
//put your code here
// constructor
function __construct() {
require_once 'DB_Connect.php';
// connecting to database
$this->db = new DB_Connect();
$this->db->connect();
}
// destructor
function __destruct() {
}
/**
* Storing new user
* returns user details
*/
public function storeUser($name, $nric, $email, $license, $address, $postal_code, $password) {
$hash = $this->hashSSHA($password);
$encrypted_password = $hash["encrypted"]; // encrypted password
$salt = …Run Code Online (Sandbox Code Playgroud) 我有以下代码,它将无法正常工作.我目前正在为系统开发一个简单的更改密码功能,并且无法使其正常运行.我想知道我是否忽略了一个非常简单的解决方案?
<?php
$con = mysql_connect("localhost","root");
if (!$con) {
die('Could not connect: ' . mysql_error());
}
$username = $_POST['userid'];
$password = $_POST['cpword'];
$newpassword = $_POST['pword'];
$confirmnewpassword = $_POST['pword2'];
$result = mysql_query("SELECT username, pword FROM login WHERE username='$username'");
if(!$result) {
echo "The username entered does not exist!";
} else
if($password != mysql_result($result, 0)) {
echo "Entered an incorrect password";
}
if($newpassword == $confirmnewpassword) {
$sql = mysql_query("UPDATE login SET pword = '$newpassword' WHERE username = '$username'");
}
if(!$sql) {
echo "Congratulations, password …Run Code Online (Sandbox Code Playgroud) 我正在开发需要登录页面的网络应用程序,一切正常,直到我尝试转换为PDO并使用准备好的查询在这里是我的代码:
$req=$idconnex->prepare("SELECT * FROM `enseignant` WHERE ens_cin=:cin AND ens_pass=:pass");
$req->bindParam(':cin',$_GET["login"]);
$req->bindParam(':pass',$_GET["password"]);
$res=$idconnex->exec($req);
if(!empty($res) AND $res->rowCount==1)
{echo 'SUCCESS';}
else
{echo 'FAIL';}
Run Code Online (Sandbox Code Playgroud)
出现警告:
警告:PDO :: exec()期望参数1为字符串,对象在...中给出
并且即使我插入正确的参数,它也会返回FAIL!
我是PHP的新手,我需要一点帮助.我很确定这可能是最常见的问题之一,并且很容易修复,但我一直在努力.我会这么愚蠢
好吧,所以这是我的问题:每次我去我的localhost尝试打开我的PHP站点它不会因为我每次都得到这个错误.
"解析错误:语法错误,第4行的C:\ xampp\htdocs\exam\_register.php中的意外'$ db'(T_VARIABLE)"
这是我的PHP代码.
<?php
session_start()
$db = mysqli_connect("localhost", "root", "", "authentication");
if (isset($_POST['register_btn'])) {
session_start();
$username = mysql_real_escape_string($_POST['username']);
$emailaddress = mysql_real_escape_string($_POST['emailaddress']);
$password = mysql_real_escape_string($_POST['password']);
$password2 = mysql_real_escape_string($_POST['password2']);
if ($password == $password2) {
$password = md5($password);
$sql = "INSERT INTO users(username, email, password) VALUES ('$username', '$emailaddress', '$password')";
mysql_query($db, $sql);
$_SESSION['message'] = "You are now registered!";
$_SESSION['username'] = $username;
header("location: home.php");
}else {
$_SESSION['message'] = "The two passwords do not match";
}
}
?>
Run Code Online (Sandbox Code Playgroud)