我的网站登录脚本和安全问题在哪里

时间:2012-11-11 07:47:07

标签: php security

我有以下登录脚本,我已尽力使其安全但有一个人攻击我的脚本并向我发送了一封他能够登录的电子邮件,他还向我发送了我的数据库信息,例如admin密码等。

的login.php

<?
@session_start();
include("../global.inc.php");

if(isset($_POST['submit']))
{

    include("../classes/class.admin.php");  
    $objAdmin = new admin();
    $verifyAdmin=$objAdmin->verifyAdmin(mysql_real_escape_string($_POST['username']),(mysql_real_escape_string($_POST['password'])));


    if($verifyAdmin==1)
    {
        $_SESSION['my_admin']="admin";
        header("location:index.php");
    }
    else
    {
        $errMsg="Invalid Username or Password.";
    }
}
?>

<form name="frm" method="post" action="">
  <table width="300" border="0" cellspacing="0" cellpadding="0">

    <tr>
        <td class="blackheader" > Admin Panel</td>
      </tr>
    <tr>
        <td valign="top" class="adminborder"><table width="100%" border="0" cellspacing="0" cellpadding="0">
                                <tr>
        <td>&nbsp;</td>
        <td style="color:#FF0000; font-size:11px; font-family:Arial, Helvetica, sans-serif;"><?=$errMsg;?></td>
    </tr>
        <tr>
            <td width="31%" height="28" align="left" valign="middle" class="admintxt">Username:</td>
            <td><input type="text" name="username" class="txtfield1" size="28"></td>
        </tr>
        <tr>
            <td height="28" align="left" valign="middle" class="admintxt">Password:</td>
            <td><input type="password" name="password" class="txtfield1" size="28"></td>
        </tr>
        <tr>
            <td></td>
            <td height="22" align="left" valign="middle"><input type="submit" name="submit" value="Login" class="submit_button">

我的头文件中有以下代码,用于检查用户是否已登录

<?php
session_start();
if(!isset($_SESSION['my_admin']))
{
    header("location: login.php");
}
?>

以下是检查管理员登录密码的课程

class admin extends dbClass
{
    function verifyAdmin($username, $password)
    {
        $select="select username,password from ".TABLE_ADMIN." where username='".$username."' and password='".$password."'";
        $query=$this->query($select,1);
        $numRows=count($query);

        return $numRows;
    }

}

2 个答案:

答案 0 :(得分:2)

  1. 使用参数化语句执行查询,以避免SQL注入。
  2. 确保这个人实际上没有通过其他安全漏洞直接访问您的服务器。

答案 1 :(得分:2)

首先,将代码切换到PDO,然后使用prepare / execute进行查询。这应该可以防止注射。

还要确保正确设置.htaccess以防止访问您的文件。

相关问题