Php 保护没有标题的网页

Php 保护没有标题的网页,php,security,http-headers,Php,Security,Http Headers,我刚读到这个。一般来说,它描述了一个存档机器人,因为它忽略了头,所以正在销毁东西。然后我意识到,我不知道如何在没有标题的页面中执行安全性。因此,我的问题是: 除了使用标题,我还可以采取哪些安全措施? 我主要是用php开发的,所以我熟悉header(“Location:”)函数。但外面还有什么 理想情况下,我希望替换 if (!$something_important) header("Location: somehereharmless.php"); 有其他(更)安全的东西吗?确保所有的get

我刚读到这个。一般来说,它描述了一个存档机器人,因为它忽略了头,所以正在销毁东西。然后我意识到,我不知道如何在没有标题的页面中执行安全性。因此,我的问题是:

除了使用标题,我还可以采取哪些安全措施?

我主要是用php开发的,所以我熟悉header(“Location:”)函数。但外面还有什么

理想情况下,我希望替换

if (!$something_important) header("Location: somehereharmless.php");

有其他(更)安全的东西吗?

确保所有的get都是幂等的


幂等式意味着多次执行相同的请求与执行一次请求具有相同的效果。

这一次效果相当好

if (!$something_important) {
  header("Location: somehereharmless.php");
  exit();
}

即使它是bot,所以它不考虑位置,您也会调用一个exit,这样执行流无论如何都会停止,所以不会有任何伤害。

header:Location很好,只要您在末尾包含一个exit。 您可能还希望包含一个链接或其他内容

我通常会这样使用:

<?php
function redirect($url)
{
    header('Location: ' . $url);
    exit('<a href="' . $url . '">Redirecting you to: ' . $url . '</a>');
}

redirect('somepage.php');
?>

这样人们就不能绕过重定向,并且知道他们应该被重定向


[编辑]


另外,删除内容时始终使用
POST
。很容易创建一个假的
GET
(例如
)。

您提供的链接中报告的事件的原因是缺少
出口头()后面的code>语句。如果脚本停止,机器人不会造成任何伤害。-

除了Alekc的答案。如果您有许多标题(“位置:”)语句,并且此人符合所有这些语句的条件。最后一个会开火

if($foo && $bar)
{
    header("Location: somehereharmless.php");
}

if($foo && $baz)
{
    header("Location: someotherplace.php");
}

因此,如果该用户设置了所有3个变量,他将被重定向到someotherplace.php。除非你有出口();或者一个骰子();在标题()之后

我要说的是,如果您有一个PHP脚本,它执行一些只有登录用户才能执行的操作,必须在同一个脚本中检查是否登录,这样您就可以一目了然地看到代码是安全的。我的规则是,只有两种有效的模式可以保护安全代码:

if (user_is_authorized()) {
    // restricted code here
}
或者Alekc的

if (!user_is_authorized()) {
    // send headers or whatever if you want
    exit();
}
// restricted code here
说实话,我很震惊。。。或者至少失望了。。。当我读到那篇文章时,我不明白为什么有人得出结论,认为一个网站可以用HTTP头来保护。标题只不过是服务器发送的一些文本。这是一条客户可以随意遵循或忽略的指令(至少,出于安全目的,您必须这样考虑)。就我而言,传出(响应)HTTP头对于安全性来说几乎毫无用处。(这不包括HTTP身份验证之类的内容,在HTTP身份验证中,您发送一个头并返回一个响应…但在这种情况下,您的安全性基于的是该回复头的内容,而不是您发送的头。)

如果(!$something\u important){
标题(“Location:somehere.php”);
//关闭所有数据库连接和其他需要结束的东西..调用函数是什么?
die(“如果重定向在3秒内未启动,请”);
}
您的解决方案是

<?php
die($errormessage);

创建POST也很容易。创建POST请求也很容易。但是,用户不太可能发出“意外”的POST请求。选择此项是因为解释更好一些。谢谢
<?php
die($errormessage);