2024 年 PHP 日本大会
添加备注

用户贡献的备注 11 条备注

16
dangan at blackjaguargaming dot net
17 年前
我建议使用 404 而不是 403,因为 403 证明存在值得入侵的东西。

index.php
<?php
define
('isdoc',1);
include(
'includes/include.sqlfunctions.php');
// index.php 的其余代码
?>

include.sqlfunctions.php(或其他包含文件)
<?php
if(isdoc !== 1) // 与 1 不相同
{
header('HTTP/1.1 404 Not Found');
echo
"<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n<html><head>\n<title>404 Not Found</title>\n</head>";
echo
"<body>\n<h1>Not Found</h1>\n<p>The requested URL ".$_SERVER['REQUEST_URI']." was not found on this server.</p>\n";
echo
"<hr>\n".$_SERVER['SERVER_SIGNATURE']."\n</body></html>\n";
// 输出与 Apache 的默认 404 类似(如果您使用的是 Apache)
exit;
}
// 此包含文件的其余代码
?>
13
k
18 年前
如何干脆不在 web 根目录中放置 php 代码……?

您可以创建一个包含 css、html 等和 index.php 的公共目录。然后使用 include_path 设置指向实际的 php 代码,例如……

webstuff
phpcode
public
images
css
index.php

然后将 include 路径设置为“../phpcode”,并且由于 php 是从脚本目录执行的,因此一切应该都很好。

我还建议将主索引命名为“main.page”或其他名称,而不是“index.php”,并更改 Web 服务器的默认索引页。这样,您就不会受到在 Web 上搜索 index 页面的恶意程序的攻击。
13
djjokla AT gmail dot com
18 年前
如果只需要包含单个文件,我使用以下方法

index.php(将包含文件的位置)
___________
<?php
define
('thefooter', TRUE);
include(
'folder/footer.inc.php');
?>

然后,页脚文件(例如)如下所示

footer.inc.php(要包含的文件)
___________
<?php
defined
('thefooter') or die('Not with me my friend');
echo(
'Copyright to me in the year 2000');
?>

因此,当有人尝试直接访问 footer.php 文件时,他/她/它将看到屏幕上显示的“Not with me my friend”消息。另一种选择是将想要直接访问该文件的人重定向到其他位置,因此,您需要在 footer.inc.php 文件中编写以下代码而不是上面的代码。

<?php
defined
('thefooter') or header('Location: http://www.location.com');
echo(
'Copyright to me in the year 2000');
?>

在正常情况下,重定向到外部站点会让访问者感到厌烦,但由于此访问者更感兴趣的是入侵站点而不是阅读内容,我认为进行这种重定向是公平的。我们真的不希望这样的人出现在我们的网站上。

对于文件保护,我使用 .htaccess,其中我说要保护文件本身和每个 .inc 文件

<Files ~ "^.*\.([Hh][Tt]|[Ii][Nn][Cc])">
Order allow,deny
Deny from all
Satisfy All
</Files>

如果有人尝试直接访问这些文件,.htaccess 文件应该会导致 403 错误。如果由于某种原因这不起作用,则会显示“Not with me my friend”文本或重定向(取决于使用的方法)

在我看来,这看起来不错且安全。
12
ocrow at simplexity dot net
21 年前
如果您的 PHP 页面包含() 或需要() 位于 Web 服务器文档根目录中的文件,例如与 PHP 页面位于同一目录中的库文件,则必须考虑攻击者可能直接调用这些库文件的可能性。

库文件中的任何程序级代码(即不是函数定义一部分的代码)都将由调用者直接执行,而不在预期的调用序列的范围内。攻击者可能能够利用此能力来导致意外的影响。

防止这种情况发生的最佳方法是阻止 Web 服务器直接调用库脚本,方法是将它们移出文档根目录,或将它们放在配置为拒绝 Web 服务器访问的文件夹中。例如,使用 Apache,在库脚本文件夹中创建一个 .htaccess 文件,其中包含以下指令

Order Allow,Deny
Deny from any
8
Thomas "Balu" Walter
19 年前
由于许多用户无法修改 apache 配置或使用 htaccess 文件,因此避免对包含文件进行不需要的访问的最佳方法是在包含文件的开头添加一行

<?php if (!defined('APPLICATION')) exit; ?>

以及所有允许外部调用的文件中

<?php define('APPLICATION', true); ?>

Balu
7
steffen at morkland dot com
18 年前
回复 djjokla 和其他人

考虑将所有包含文件放在如前所述的单独文件夹中,该文件夹包含一个 .htaccess,其中包含 Order Deny,Allow

然后创建一个 index 文件,该文件旨在处理对您的 php 应用程序的所有请求,然后使用 index.php?view=index 调用它

index 文件可能看起来像这样

<?php
switch($_GET['view']){
case
'index':
include(
'libs/index.php');
break;
default:
include(
'libs/404.php');
break;
}
?>

这可以是一个数组,或者更具创意的东西。实际上,你怎么做都没关系……通过一个中央脚本运行所有页面有一个很大的优势……那就是**控制**。
在任何给定时间,您可以轻松地实现对函数的访问控制,而不会遗漏关键文件。
2
inland14 at live dot com
5年前
良好的Dharma令牌,基本上位于Feed中的某个位置,允许无需重新编程和注入的用户进入网站。

每隔几分钟更改一次此POST AJAX调用URL,以排除未遵循您门户网站的用户。您可以将其与他们来自哪里结合起来。只是为了应对广告点击的情况。

您可以根据time()和与其相差一定值的数值(大约每5分钟一次?)创建一个非常好的令牌。通过在登录时或他们刚进入网站时抓取免费令牌来平衡负载。并且在未知道令牌的情况下,不要让他们在指定的第5分钟或您更改守卫的定时算法和值之后进入Feed。这可以通过跨页面传递变量来弥补。直接使用curl将POST令牌注入您自己的站点。并像会话ID一样将其组合。
2
匿名
9年前
chroot**不是**安全特性。不要将其用作安全特性。请阅读chroot的手册页,了解它的实际用途。
2
ManifoldNick at columbus dot rr dot com
21 年前
请记住,安全风险通常不涉及数月的准备工作或后门,或者你在《谍影重重》中看到的其他任何东西;)事实上,新手犯的一个最大错误是没有从用户输入中删除“<”(尤其是在使用留言板时),因此理论上,用户可以秘密地弄乱页面,甚至让您的服务器运行PHP脚本,这将允许他们对您的网站造成严重破坏。
1
anonymous at domain dot com
21 年前
最好的方法是将PHP构建为CGI,在suexec下运行,并使用chroot监禁用户。这不是最好的方法,但相当不显眼,提供了多个检查点,唯一的缺点是,嗯,有点慢。8)
To Top