我需要清理php中的登录值吗

我需要清理php中的登录值吗,php,Php,下面是我在登录页面中使用的脚本 <?php //include config require_once('includes/config.php'); //check if already logged in move to home page if ($user->is_logged_in()) { header('Location: index.php'); } //process login form if submitted if (isset($_POST['s

下面是我在登录页面中使用的脚本

<?php
//include config
require_once('includes/config.php');

//check if already logged in move to home page
if ($user->is_logged_in()) {
    header('Location: index.php');
}

//process login form if submitted
if (isset($_POST['submit'])) {

    $username = filter_input(INPUT_POST, 'username');
    $password = filter_input(INPUT_POST, 'password');

    if ($user->login($username, $password)) {
        $_SESSION['username'] = $username;
        header('Location: memberpage.php');
        exit;
    } else {
        $error[] = 'Wrong username or password or your account has not been activated.';
    }
}//end if submit
//define page title
$title = 'Login';

//include header template
require('layout/header.php');
?>
密码验证()代码

公共函数密码\u验证($password,$hash){
如果(!function_存在('crypt')){
触发错误(“密码验证必须加载密码才能正常工作”,E用户警告);
返回false;
}
$ret=crypt($password,$hash);

如果(!is_string($ret)| strlen($ret)!=strlen($hash)| strlen($ret)这真的有效吗

我明白了:

if($this->password_verify($password,$hashed) == 1){
但是您的类中没有
password\u verify()
方法。如果您指的是
password\u verify()
函数,则应将其更改为:

if(password_verify($password,$hashed)){
为了回答您的问题,您使用的是预处理语句,因此您不应该转义数据,您可以安全地避免sql注入。即使您需要-例如,如果您将值直接注入某个查询中-您也需要一个PDO转义函数,而不是
mysql.*
函数。但是要始终如一地使用预处理语句这显然是更好的解决方案,因为你不能因为偶然而忘记任何事情

我能看到的唯一真正的问题是,您将捕获到的异常消息回显给用户。您应该将其记录下来,并向用户显示一条非技术性错误消息


当然,您应该在数据库调用中添加错误处理:空结果不是错误,也不会导致异常,但会导致代码出现问题,因此您应该对此进行检查。

这是否真的有效

我明白了:

if($this->password_verify($password,$hashed) == 1){
但是您的类中没有
password\u verify()
方法。如果您指的是
password\u verify()
函数,则应将其更改为:

if(password_verify($password,$hashed)){
为了回答您的问题,您使用的是预处理语句,因此您不应该转义数据,您可以安全地避免sql注入。即使您需要-例如,如果您将值直接注入某个查询中-您也需要一个PDO转义函数,而不是
mysql.*
函数。但是要始终如一地使用预处理语句这显然是更好的解决方案,因为你不能因为偶然而忘记任何事情

我能看到的唯一真正的问题是,您将捕获到的异常消息回显给用户。您应该将其记录下来,并向用户显示一条非技术性错误消息


当然,您应该在数据库调用中添加错误处理:空结果不是错误,也不会导致异常,但会导致代码出现问题,因此您应该对此进行检查。

这是否真的有效

我明白了:

if($this->password_verify($password,$hashed) == 1){
但是您的类中没有
password\u verify()
方法。如果您指的是
password\u verify()
函数,则应将其更改为:

if(password_verify($password,$hashed)){
为了回答您的问题,您使用的是预处理语句,因此您不应该转义数据,您可以安全地避免sql注入。即使您需要-例如,如果您将值直接注入某个查询中-您也需要一个PDO转义函数,而不是
mysql.*
函数。但是要始终如一地使用预处理语句这显然是更好的解决方案,因为你不能因为偶然而忘记任何事情

我能看到的唯一真正的问题是,您将捕获到的异常消息回显给用户。您应该将其记录下来,并向用户显示一条非技术性错误消息


当然,您应该在数据库调用中添加错误处理:空结果不是错误,也不会导致异常,但会导致代码出现问题,因此您应该对此进行检查。

这是否真的有效

我明白了:

if($this->password_verify($password,$hashed) == 1){
但是您的类中没有
password\u verify()
方法。如果您指的是
password\u verify()
函数,则应将其更改为:

if(password_verify($password,$hashed)){
为了回答您的问题,您使用的是预处理语句,因此您不应该转义数据,您可以安全地避免sql注入。即使您需要-例如,如果您将值直接注入某个查询中-您也需要一个PDO转义函数,而不是
mysql.*
函数。但是要始终如一地使用预处理语句这显然是更好的解决方案,因为你不能因为偶然而忘记任何事情

我能看到的唯一真正的问题是,您将捕获到的异常消息回显给用户。您应该将其记录下来,并向用户显示一条非技术性错误消息


当然,您应该在数据库调用中添加错误处理:空结果不是错误,也不会导致异常,但会导致代码中出现问题,因此您应该对此进行检查。

请检查。。它们不再维护,现在是。改为了解,然后使用。@JayBlanchard
PDO
我不知道任何事情请举例说明您使用的是什么API?@SimonAndréForsberg这正是它所属的位置。我需要清理我的登录值吗php@Fred-现在我完全同意。在代码审查时,我们经常会问“这个代码有效吗?如何才能做得更好?”问题,而CR更多的是关于“这是有效的。如何才能做得更好?”。知道你的代码是否有效的唯一方法是测试它。请。它们不再被维护,而是被维护。改为了解,然后使用。@JayBlanchard
PDO
我对它一无所知,使用prepared语句搜索它将有助于保护。你能举个例子吗?你在使用什么API?@SimonAndréForsberg it's确切地说是它所属的位置。我需要在中清理我的登录值吗php@Fred-ii-现在我完全同意。在代码审查时,我们经常会问“这段代码有效吗?如何改进?”问题,而CR更多的是关于“这段代码有效。如何改进?”。知道你的代码是否有效的唯一方法是测试它。请。它们不再被维护,而是被维护。请改为了解,然后使用。@JayBlanchard
PDO
我对此一无所知