好,
渐渐地,我正在解决学习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,因为我听说它是安全的。
答案 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;你只是毫无理由地膨胀你的代码。