我使用 Acunetix Web 漏洞扫描程序扫描了我的网站,发现了主机 header 攻击漏洞。
在描述中说我写了
(_SERVER["HTTP_HOST"] in PHP
但我没有,我不知道如何解决这个问题。
这是受影响文件的标题
<?php
include 'core/init.php';
if($user->is_loggedin()){
redirect('index.php');
exit();
}
if($detect->isMobile()){
redirect('http://m.website.com/prijava.php');
exit();
}
if(isset($_POST['prijava'])){
$post = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
if(time() - $user->failTime($post['email']) < 600 && $user->failCount($post['email']) >= 3){
$err = '<p style="color:red;">Račun vam je zaključan na 10 minuta.</p>';
}else{
if(empty($post['email']) || empty($post['password'])){
$err = '';
}elseif($id = $user->prijava($post['email'], $post['password'])){
if($user->isActive($post['email'])){
$_SESSION['user'] = $id['id'];
$user->resetFail();
redirect('index.php');
exit();
}else{
$err = '<p style="color:red;">Korisnički račun nije aktiviran.</p>';
}
}else{
if($user->checkMail($post['email'])){
if($user->storeFail($post['email'])){
$err = '<p style="color:red;">Lozinka i email se ne poklapaju.</p>';
}
}else{
$err = '<p style="color:red;">Lozinka i email se ne poklapaju.</p>';
}
}
}
}
?>
和html
<head>
<meta charset="UTF-8">
<title>Prijava</title>
<link rel="shortcut icon" href="images/favicon.png" type="image/png">
<link rel="stylesheet" type="text/css" href="css/sign.css?<?php echo time(); ?>">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
</head>
这是漏洞描述的图片:
综上所述,我该如何保护我的网站,谢谢。
最佳答案
有两种方法可以防止主机头攻击:
使用 $_SERVER['SERVER_NAME'] 并在 httpd(Apache、nginx 等)配置级别实现它
这意味着您应该为您服务的每个域都有一个明确配置的虚拟主机。或者换句话说 - 不允许“包罗万象”的配置。
检查它是否与您服务的域白名单相匹配:
// Just in case there's more than one ...
$domains = ['abc.example.com', 'foo.bar.baz'];
if ( ! in_array($_SERVER['SERVER_NAME'], $domains)) {
// error
}
不管它的名字暗示什么,除非你遵循第一个解决方案,$_SERVER['SERVER_NAME'] 也将在 PHP 运行时由 Host header 值填充一个“包罗万象”的配置。
因此,除非您的 HTTP 服务器配置正确,否则它们都是相等的,因此为什么上面的两个解决方案都引用 $_SERVER['SERVER_NAME'] - 使用它或 实际上并不重要$_SERVER['HTTP_HOST']。
关于php - 防止主机头攻击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43941048/
我有一个ActiveRecord对象,我想在不对模型进行永久验证的情况下阻止它被保存。您过去可以使用errors.add执行类似的操作,但它看起来不再有效了。user=User.lastuser.errors.add:name,"namedoesn'trhymewithorange"user.valid?#=>trueuser.save#=>true或user=User.lastuser.errors.add:base,"myuniqueerror"user.valid?#=>trueuser.save#=>true如何在不修改用户对象模型的情况下防止将用户对象保存在Rails3.2中
Ruby中防止SQL注入(inject)的好方法是什么? 最佳答案 直接使用ruby?使用准备好的语句:require'mysql'db=Mysql.new('localhost','user','password','database')statement=db.prepare"SELECT*FROMtableWHEREfield=?"statement.execute'value'statement.fetchstatement.close 关于ruby-防止SQL注入(inject
什么是0day漏洞?0day漏洞,是指已经被发现,但是还未被公开,同时官方还没有相关补丁的漏洞;通俗的讲,就是除了黑客,没人知道他的存在,其往往具有很大的突发性、破坏性、致命性。0day漏洞之所以称为0day,正是因为其补丁永远晚于攻击。所以攻击者利用0day漏洞攻击的成功率极高,往往可以达到目的并全身而退,而防守方却一无所知,只有在漏洞公布之后,才后知后觉,却为时已晚。“后知后觉、反应迟钝”就是当前安全防护面对0day攻击的真实写照!为了方便大家理解,中科三方为大家梳理当前安全防护模式下,一个漏洞从发现到解决的三个时间节点:T0:此时漏洞即0day漏洞,是已经被发现,还未被公开,官方还没有相
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它
我在生产环境(CentOS5.6)中遇到此错误,但在开发环境(Ubuntu11.04)中运行良好。在这两种环境中,该应用程序都使用Ruby1.9.3和Rails3.0.9,并由passenger和nginx提供服务。我的Mechanizegem版本是2.3。未找到代码转换器(UTF-8)此代码的最后一行触发它:mech=Mechanize.newpage=mech.get("http://myurl.com/login.php?login_name=a&password=b")form=page.form_with(:name=>"loginForm")form.field_with(
我有三个模型:User、Comment和Upvote。User-to-Comment是一对多的关系,Comment-to-Upvote是一对多的关系,而User-to-Upvote是一对多的关系。我想做一些类似于在Stackoverflow上进行投票的事情。因此,当您投赞成票/反对票时,箭头将突出显示并保持突出显示状态,即使您在几天/几周后刷新页面或返回页面也是如此。目前我正在这样做:voted?方法在哪里:defself.voted?(user_id,comment_id)find_by(comment_id:comment_id,user_id:user_id).present?e
前言 Slowloris攻击是我在李华峰老师的书——《MetasploitWeb 渗透测试实战》里面看的,感觉既简单又使用,现在这种攻击是很容易被防护的啦。不过我也不敢真刀实战的去试,只是拿个靶机玩玩罢了。 废话还是写在结语里面吧。(划掉)结语可以不看(划掉)Slowloris攻击的原理 Slowloris是一种资源消耗类DoS攻击,它利用部分HTTP请求进行操作。也叫做慢速攻击,这里的慢速并不是说发动攻击慢,而是访问一条链接的速度慢。Slowloris攻击的功能是打开与目标Web服务器的连接,然后尽可能长时间的保持这些连接打开。如果由多台电脑同时发起Slo
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我使用PHP的时间太长了,对它感到厌倦了。我也想学习一门新语言。我一直在使用Ruby并且喜欢它。我必须在Rails和Sinatra之间做出选择,那么您会推荐哪一个?Sinatra真的不能用来构建复杂的应用程序,它只能用于简单的应用程序吗?
ruby中的大多数session固定主题都与Rails相关。sinatra中是否存在任何session固定漏洞?在rails中,我们通常建议在分配session之前执行reset_session。我们如何防止sinatra中的session固定? 最佳答案 Sinatra默认使用Rack::Protectiongem来防止许多常见漏洞。您可能对其session劫持保护特别感兴趣。这些是Rack::Protectiongem防止的一些事情:跨站请求伪造真实性token:如果给定的访问token与session中包含的token相匹配,
我很确定Ruby有这些(等同于__call、__get和__set),否则find_by将如何在Rails中工作?也许有人可以举一个简单的例子来说明如何定义与find_by相同的方法?谢谢 最佳答案 简而言之你可以映射__调用带有参数的method_missing调用__设置为方法名称以'='结尾的method_missing调用__获取不带任何参数的method_missing调用__调用PHPclassMethodTest{publicfunction__call($name,$arguments){echo"Callingob