Php 保护我的DB类免受黑客攻击的最佳方法是什么
我有一个名为“DBinterface”的类和一个名为“user”的类Php 保护我的DB类免受黑客攻击的最佳方法是什么,php,oop,Php,Oop,我有一个名为“DBinterface”的类和一个名为“user”的类 connect函数是公共的吗 class dbinterface { private $_dbLink; private $dbHost = 'host'; private $dbUser = 'user'; private $dbName = 'name'; private $dbPass = 'pass'; private $dbUserTable = 'table'; pub
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());
}
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()
PS:为了便于阅读,我已经删除了密码加密和转义字符串。您需要确保无法从web服务器检索php文件——也就是说,它们将执行,但不会返回。即使有了这个保证,出于几个原因,我也不会将您的数据库密码放在php文件中,其中一个原因是安全性。相反,我会将连接详细信息(全部,而不仅仅是密码)放在一个文本文件中,您的php脚本知道如何查找(和读取),但是该文本文件与php不在同一目录中,如果您可以控制它,甚至不在web服务器可以提供GET/PORT访问的目录中。如果该控件不可用,至少要有一个.htaccess,以确保文本文件不会通过任何直接URL访问。您需要确保无法从web服务器检索php文件,也就是说,它们将执行,但不会返回。即使有了这个保证,出于几个原因,我也不会将您的数据库密码放在php文件中,其中一个原因是安全性。相反,我会将连接详细信息(全部,而不仅仅是密码)放在一个文本文件中,您的php脚本知道如何查找(和读取),但是该文本文件与php不在同一目录中,如果您可以控制它,甚至不在web服务器可以提供GET/PORT访问的目录中。如果该控件不可用,至少要有一个.htaccess,以确保您的文本文件不会通过任何直接URL访问。那么您要问的是,在插入之前转义数据的最佳方法是什么 你调查过了吗 或者你是在问一般的网络安全问题?比如确保没有人可以透露你的数据库信息或者直接调用脚本 您可以将DB凭据嵌套在根目录下,并将它们包含在此类中。您还可以通过在公共文件的其他位置定义一个常量并在每个类文件的头中包含类似的内容来防止直接调用任何文件:
<?php defined('IN_APP') or die('No access allowed.');
如果我错过了要点,请随意评论,我会尽我所能进行调整。那么你是在问插入前转义数据的最佳方法是什么 你调查过了吗 或者你是在问一般的网络安全问题?比如确保没有人可以透露你的数据库信息或者直接调用脚本 您可以将DB凭据嵌套在根目录下,并将它们包含在此类中。您还可以通过在公共文件的其他位置定义一个常量并在每个类文件的头中包含类似的内容来防止直接调用任何文件:
<?php defined('IN_APP') or die('No access allowed.');
如果我错过了要点,请随意评论,我会尽我所能进行调整。我不会太担心。如果黑客在你的机器上执行代码,他们会尝试使用开放式sql处理程序,而不是你的类。我不会太担心。如果黑客以任何方式在您的计算机上执行代码,他们会尝试使用开放式sql处理程序,而不是您的类。用户不能随意调用标记为public的函数,除非您允许最终用户自己调用
registerUser
,不,没关系,只需清理您的输入…mysql扩展已经过时,正在被弃用。新代码应该使用mysqli或PDO,这两者都有重要的优势,比如支持预先准备好的语句。用户不能随意调用标记为public的函数,除非您允许最终用户调用自己的注册器,不,没关系,只需清理您的输入…mysql扩展已经过时,正在被弃用。新代码应该使用mysqli或PDO,这两者都有重要的优点,比如支持预先准备好的语句。我看了,但除了如何使用它,我在“应用程序”上找不到更多信息。它是什么?或者你知道一个链接可以解释它吗?IN_应用程序只是一个字符串。你可以随便叫它什么。定义('LOL');因此,在oop代码的其他地方—构造函数或其他东西—包含具有此定义的db配置。如果先调用构造函数,则会授予定义的('LOL')或die('no access'),如果尝试直接调用脚本,则会授予die。当然,htaccess也可以在一行中实现这一点。我们使用这两种方法只是因为大多数框架默认使用这种冗余。我看了,但除了如何使用它,我在“应用程序”上找不到更多信息。它是什么?或者你知道一个链接可以解释它吗?IN_应用程序只是一个字符串。你可以随便叫它什么。定义('LOL');因此,在oop代码的其他地方—构造函数或其他东西—包含具有此定义的db配置。如果先调用构造函数,则会授予定义的('LOL')或die('no access'),如果尝试直接调用脚本,则会授予die。当然,htaccess也可以在一行中实现这一点。我们使用两者只是因为大多数框架默认这种冗余。