只有某些PHP文件可以将GET请求发送到文件?

时间:2013-08-15 12:01:17

标签: php mysql pdo

好,

渐渐地,我正在解决学习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,因为我听说它是​​安全的。

3 个答案:

答案 0 :(得分:0)

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

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

^然后。

define( 'SOMETHING', 1 );

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

答案 1 :(得分:0)

请注意,如果您正确使用PDO,PDO才是安全的 - 确保使用预准备语句传递所有数据。使用不当,它仍然不安全。

如果您想阻止用户直接加载文件,您可以选择一些选项。

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

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

第二个选项是使用define来告知用户通过索引文件输入的其余代码。在index.php的顶部添加define( 'INDEX_PASSED', true );或其他内容,然后在顶部的其他文件中添加if( !defined( 'INDEX_PASSED' ) ) exit;。这很危险,因为你必须记住在每个文件中都这样做。以前的方法要好得多。

答案 2 :(得分:0)

没有什么可以犹豫的。

直接访问此文件根本不会造成任何伤害。

虽然这些都是无用的&#34;保护&#34;你只是毫无理由地膨胀你的代码。