Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dreamweaver PHP登录注销的安全性如何?_Php_Mysql_Security_Dreamweaver_Login Script - Fatal编程技术网

Dreamweaver PHP登录注销的安全性如何?

Dreamweaver PHP登录注销的安全性如何?,php,mysql,security,dreamweaver,login-script,Php,Mysql,Security,Dreamweaver,Login Script,为了知识起见,我想知道使用Dreamweaver内置的PHP登录注销身份验证功能有多好 安全吗? 我总是使用会话、帖子和很多东西来构建登录系统,但是当我使用Dreamweaver one时,它非常简单,而且看起来很安全。仍然需要专家的建议,我应该开始使用它还是传统的更好。我没有发现任何限制,只是想知道它是否足够安全 以下是Dreamweaver提供的代码:- 这是我的登录表 这是我的错误处理代码 这是我的进一步代码 //数据库连接包括 另外,我想知道,为了建立一个高效的登录

为了知识起见,我想知道使用Dreamweaver内置的PHP登录注销身份验证功能有多好

安全吗?

我总是使用会话、帖子和很多东西来构建登录系统,但是当我使用Dreamweaver one时,它非常简单,而且看起来很安全。仍然需要专家的建议,我应该开始使用它还是传统的更好。我没有发现任何限制,只是想知道它是否足够安全

以下是Dreamweaver提供的代码:-


这是我的登录表




这是我的错误处理代码




这是我的进一步代码


//数据库连接包括
另外,我想知道,为了建立一个高效的登录系统,我们还需要采取哪些其他安全措施,上面的代码是否100%完美,没有安全问题。

它容易受到攻击。对不起

此外,我过去在dreamweaver有一个PHP后台客户端。他被谷歌入侵(所有数据库记录都被删除)

显然:

  • 某些页面不安全-未验证凭据

  • 存在“删除”链接,该链接不强制任何确认,并在GET中工作(标准失败)

  • 谷歌很好地抓取了backoffice并删除了所有内容(在日志中说)

  • 它容易受到攻击。对不起

    此外,我过去在dreamweaver有一个PHP后台客户端。他被谷歌入侵(所有数据库记录都被删除)

    显然:

  • 某些页面不安全-未验证凭据

  • 存在“删除”链接,该链接不强制任何确认,并在GET中工作(标准失败)

  • 谷歌很好地抓取了backoffice并删除了所有内容(在日志中说)

  • 没有。我看到一些问题:

    1) 首先,存在一个XSS漏洞。当您像这样回显
    $\u服务器['PHP\u SELF']
    时,需要使用
    htmlspecialchars()
    对其进行转义。如果您不这样做,攻击者可以创建一个链接,当单击该链接时,该链接将窃取会话cookie,该cookie可用于在没有用户名和密码的情况下登录。 见:

    2)
    GetSQLValueString
    有问题。如果
    mysql\u real\u escape\u string()
    不存在,则返回到
    mysql\u escape\u string()
    。您永远不应该回到
    mysql\u escape\u string()
    。如果
    mysql\u real\u escape\u string()
    不可用,并且您依赖它来避免SQL注入,那么您的应用程序应该停止。 此函数还在知道数据类型之前对数据进行转义。如果您使用的是intval()、floatval()、doubleval(),则无需先执行
    mysql\u real\u escape\u string()

    我建议将此更改为使用MySQLi或PDO参数化查询,它将自动为您处理转义

    MySQLi: PDO:

    3) 在成功登录时,它似乎正在尝试(并且失败)重定向到上一页。除非您硬编码了URL或验证了用户提供的URL,否则不应重定向。如果不这样做,您可能容易受到开放式重定向/网络钓鱼攻击。 似乎有人试图通过将
    false
    添加到
    if
    中来解决此问题:
    if(isset($\u SESSION['PrevUrl')&&false){
    ,此语句将永远不会计算为
    true
    ,因此保留它是毫无意义的

    4) .请看这一行:

    $LoginRS = mysql_query($LoginRS__query, $ecs) or die(mysql_error());
    
    如果在执行此查询时出现任何MySQL错误,则应用程序将打印出完整的MySQL错误,然后停止。这对任何试图执行SQL注入攻击的人都非常有帮助。即使您已经为SQL注入提供了安全保护,这仍然会告诉世界您数据库结构的各个部分。 您应该使用
    trigger\u error()
    或自己记录错误,但不要在生产/现场/公共系统中向用户显示

    5) 。最后,可以对登录/注销表单执行XSRF攻击。提交登录/注销等操作时,应使用反XSRF令牌。 见:

    没有。我看到一些问题:

    1) 首先有一个XSS漏洞。当你像那样回显
    $\u服务器['PHP_SELF']
    时,需要使用
    htmlspecialchars()
    对其进行转义。如果你不这样做,攻击者可以创建链接,单击该链接时,将窃取会话cookie,该cookie可用于在没有用户名和密码的情况下登录。 见:

    2)
    GetSQLValueString
    有问题。如果
    mysql\u real\u escape\u string()
    不存在,则返回到
    mysql\u escape\u string()
    。如果
    mysql\u real\u escape\u string()
    不可用,并且您依赖它来避免SQL注入,您的应用程序应该停止。 此函数还在知道数据类型之前对数据进行转义。如果使用intval()、floatval()、doubleval(),则无需先执行
    mysql\u real\u escape\u string()

    我建议将此更改为使用MySQLi或PDO参数化查询,它将自动为您处理转义

    MySQLi: PDO:

    3) 成功登录时,它似乎正在尝试(但失败)重定向到上一页。除非您硬编码了URL或验证了用户提供的URL,否则不应重定向。如果不这样做,您可能会受到开放式重定向/网络钓鱼攻击。 似乎有人试图通过将
    false
    添加到
    if
    中来解决此问题:
    if(isset($\u SESSION['PrevUrl')&&false){
    ,此语句将永远不会计算为
    true
    ,因此保留它是毫无意义的

    4) .请看这一行:

    $LoginRS = mysql_query($LoginRS__query, $ecs) or die(mysql_error());
    
    如果有我的
    // Database Connection Include
    <?php require_once('Connections/ecs.php'); ?>
    <?php
    if (!function_exists("GetSQLValueString")) {
    function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
    {
      if (PHP_VERSION < 6) {
        $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
      }
    
      $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
    
      switch ($theType) {
        case "text":
          $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
          break;    
        case "long":
        case "int":
          $theValue = ($theValue != "") ? intval($theValue) : "NULL";
          break;
        case "double":
          $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
          break;
        case "date":
          $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
          break;
        case "defined":
          $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
          break;
      }
      return $theValue;
    }
    }
    ?>
    <?php
    // *** Validate request to login to this site.
    if (!isset($_SESSION)) {
      session_start();
    }
    
    $loginFormAction = $_SERVER['PHP_SELF'];
    if (isset($_GET['accesscheck'])) {
      $_SESSION['PrevUrl'] = $_GET['accesscheck'];
    }
    
    if (isset($_POST['ecsuser'])) {
      $loginUsername=$_POST['ecsuser'];
      $password=md5($_POST['ecspass']);
      $MM_fldUserAuthorization = "";
      $MM_redirectLoginSuccess = "index.php";
      $MM_redirectLoginFailed = "login.php?ERRORMESSAGE=1";
      $MM_redirecttoReferrer = false;
      mysql_select_db($database_ecs, $ecs);
    
      $LoginRS__query=sprintf("SELECT username, password FROM student WHERE username=%s AND password=%s",
        GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text")); 
    
      $LoginRS = mysql_query($LoginRS__query, $ecs) or die(mysql_error());
      $loginFoundUser = mysql_num_rows($LoginRS);
      if ($loginFoundUser) {
         $loginStrGroup = "";
    
        if (PHP_VERSION >= 5.1) {session_regenerate_id(true);} else {session_regenerate_id();}
        //declare two session variables and assign them
        $_SESSION['MM_Username'] = $loginUsername;
        $_SESSION['MM_UserGroup'] = $loginStrGroup;       
    
        if (isset($_SESSION['PrevUrl']) && false) {
          $MM_redirectLoginSuccess = $_SESSION['PrevUrl'];  
        }
        header("Location: " . $MM_redirectLoginSuccess );
      }
      else {
        header("Location: ". $MM_redirectLoginFailed );
      }
    }
    ?>
    
    Is it secure?
    
    $LoginRS = mysql_query($LoginRS__query, $ecs) or die(mysql_error());