保护我的数据库类免遭黑客攻击的最佳方法是什么

时间:2012-01-20 00:17:22

标签: php oop

我有一个名为'DBinterface'的类和一个名为'user'的类。

  1. 连接功能是公共的吗?

    class dbinterface {
    
        private $_dbLink;
    private $dbHost = 'host';
        private $dbUser = 'user';
        private $dbName = 'name';
        private $dbPass = 'pass';
        private $dbUserTable = 'table';
    
     public function connect ()
    {
        $this->_dbLink = mysql_connect($this->_dbHost, $this->_dbUser, $this->_dbPass);
        if(!$this->_dbLink) 
            throw new Exception ("Could not connect to database. " . mysql_error());
    }
    
  2. 我有一个sql表,用于存储我的所有用户信息,如userID和密码。我可以将该表的名称放入这样的函数中,而不会有人轻易攻击它的风险,或者我应该将它放在我的db类中吗?

    function registerUser($userName, $userPassword) {
    
        $db = new db();
        $db->connect();
    
        // Select database
        mysql_select_db($this->dbName);
    
        $query = "insert into usersExample values (NULL, \"$userName\", \"$userPassword\")";
        $result = mysql_query($query);
    
        // Test to make sure query worked
        if(!$result) die("Query didn't work. " . mysql_error());
    
        // Get the user ID
        $this->userID = mysql_insert_id();
    
        // Close database connection
        mysql_close($dbLink);
    
    } // End registerUser()
    
  3. PS:我已删除密码加密和转义字符串以便易读。

3 个答案:

答案 0 :(得分:1)

所以你问在插入之前逃避数据的最佳方法是什么?

你有没看过mysql_real_escape_string()

或者您是否一般都在询问网络安全?就像确保没有人能够以某种方式显示您的数据库信息或直接调用脚本一样?

您可以将数据库凭据嵌套在root下,并将其包含在此类中。您还可以通过在公共文件中的其他位置定义常量来阻止直接调用任何文件,并在每个类文件的标题中包含类似的内容:

<?php defined('IN_APP') or die('No access allowed.');

显然你会在其他地方定义IN_APP:

define('IN_APP', true);

如果我错过了这一点,请随时发表评论,我会尽我所能进行调整。

答案 1 :(得分:0)

您需要确保无法从Web服务器检索php文件 - 也就是说,它们将执行,但不会被返回。即使有这样的保证,我也不会将您的数据库密码放在php文件中,原因有几个,其中一个是安全性。相反,我会将连接详细信息(所有,而不仅仅是密码)放在一个文本文件中,您的php脚本知道如何查找(和读取),但是文本文件与php不在同一目录中,如果可以的话控制它,即使在您的Web服务器可以提供GET / PORT访问的目录中也是如此。如果该控件不可用,则至少要有.htaccess,以确保不通过任何直接URL访问您的文本文件。

答案 2 :(得分:0)

我不会太担心。如果黑客要在你的机器上执行代码,他们会尝试使用一个开放的sql处理程序,而不是你的类。