0

好的,

所以一点一点地,我正在应对学习 PHP 的挑战者。每次玩它时,我都会越来越了解它。

让我有点犹豫的是安全性。

我如何能够拒绝直接访问文件并只允许特定文件能够访问/发送 GET 请求/执行查询?

我正在设置一个配置文件和一个 index.php 文件,基本上我将使用配置文件连接 index.php。

<?php

// MySQL Credentials
define('DATA_HOST', 'localhost');
define('DATA_NAME', 'mysql');
define('DATA_USER', 'mysql');
define('DATA_PASS', 'mypass');

 try {
   $connection = new PDO('mysql:host='. DATA_HOST .';dbname='.DATA_NAME, DATA_USER, DATA_PASS);
   $connection->SetAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 } catch(PDOException $e) {
     echo '<h2>PDO unable to connect to database!</h2>';
 }


?>

那是我当前的配置文件,使用 PDO,因为我听说它是​​安全的。

4

3 回答 3

0

对不起大家,我做了更多的挖掘,我找到了解决方案。

if( !defined( 'SOMETHING', 1 ) )
{
    echo( '<h1>You may not access this file directly.</h1>' );
    exit;
}

^ 在配置文件上,然后。

define( 'SOMETHING', 1 );

^ 在想要包含配置文件的文件上。

于 2013-08-15T12:10:01.380 回答
0

请注意,只有正确使用 PDO 才是安全的——确保使用准备好的语句来传递所有数据。使用不当,仍然不安全。

如果你想阻止用户直接加载文件,你有几个选择。

最好的办法是将它们完全放在文档根目录之外。然后就不用担心了。但是,这使得部署变得困难。

下一个最好的方法是使用 htaccess(或您选择的 http 服务器上的等效项)来阻止对包含您的代码的整个子文件夹的公共访问。在我的项目中,我将所有代码放在一个名为“private”的文件夹下,并将所有公共文件放在该文件夹下,因此我可以完全阻止私人文件夹。

第二种选择是使用定义来告诉用户通过索引文件输入的其余代码。在 index.php 的顶部添加define( 'INDEX_PASSED', true );什么,然后在顶部的其他文件中您可以简单地执行if( !defined( 'INDEX_PASSED' ) ) exit;. 这很危险,因为您必须记住在每个文件中都这样做。以前的方法要好得多。

于 2013-08-15T12:11:13.583 回答
0

没有什么可犹豫的。

直接访问此文件不会有任何害处。

虽然使用所有这些无用的“保护”,但您只是无缘无故地膨胀您的代码。

于 2013-08-15T12:20:42.633 回答