防止恶意解析(禁止通过IP直接访问)

防止恶意解析——禁止通过IP直接访问网站

image-20221207201004225

一、什么是恶意解析

一般情况下,要使域名能访问到网站需要两步,第一步,将域名解析到网站所在的主机,第二步,在web服务器中将域名与相应的网站绑定。但是,如果通过主机IP能直接访问某网站,那么把域名解析到这个IP也将能访问到该网站,而无需在主机上绑定,也就是说任何人将任何域名解析到这个IP就能访问到这个网站。可能您并不介意通过别人的域名访问到您的网站,但是如果这个域名是未备案域名呢?一旦被查出,封IP、拔线甚至罚款的后果都是需要您来承担的。某些别有用心的人,通过将未备案域名解析到别人的主机上,使其遭受损失,这是一种新兴的攻击手段。

二、Apache服务

在用apache搭建的WEB服务器的时候,如何想只能通过设定的域名访问,而不能直接通过服务器的IP地址访问呢,有以下两种方法可以实现(当然肯定还会有其他方法可以实现),都是修改httpd.conf文件来实现的,下面举例说明。

在httpd.conf文件最后面,加入以下代码

NameVirtualHost *:80  
<VirtualHost *:80>      ServerName 221.*.*.*      
    <Location>Order Allow,Deny  Deny from all</Location>  
</VirtualHost>         
<VirtualHost *:80> DocumentRoot   "/www/web" ServerName www.wzlinux.com  </VirtualHost>

说明:上部分是实现拒绝直接通过221...这个IP的任何访问请求,这时如果你用221..*.*访问,会提示拒绝访问。下部分就是允许通过www.wzlinux.com这个域名访问,主目录指向/www/web(这里假设你的网站的根目录是/www/web)。

三、Tomcat服务

修改server.xml这个配置文件。

比如服务器IP地址是 192.168.1.2 ,相应域名是 www.wzlinux.com。

打开 %TOMCAT_HOME%/conf/server.xml文件,找到 Engine节点作如下Xml代码。

<Engine name="Catalina" defaultHost="www.piis.cn"  >     
    <Host name= "www.piis.cn"  appBase= "webapps" unpackWARs=  "true"   autoDeploy=  "true" xmlValidation= "false"   xmlNamespaceAware=  "false"  />     
    <Host name= "192.168.1.2"  appBase= "ipapps"  unpackWARs=  "true"   autoDeploy=  "true"  xmlValidation= "false"   xmlNamespaceAware=  "false"  />   
</Engine  >

注意事项:

1. Engine 节点配置的 defaultHost 表明缺省访问的Host。defaultHost对应的名称必须存在于Engine节点下配置的host节点中。

2. 当一台机器有多个IP,而按照规定只允许通过一个指定的域名访问时很有用。此时,把defaultHost指定为非域名对应的host,这样不通过域名访问时就都定位到指定的非域名HOST了

3. Host 节点 name 对应IP地址,以及域名。一个Host只有指定一个IP或域名。

4. Host 节点的 appBase ,对应的是存放web应用的目录。这里输入的目录相对于 %TOMCAT_HOME%,如上面的www.wzlinux.com对应的目录是 %TOMCAT_HOME%/webapps,而192.168.1.2 对应的目录是 %TOMCAT_HOME%/ipapps。

四、Nginx服务

定义一个默认的空主机名,禁止其访问,需要通过的域名一定要在其他server配置。

当用户使用http协议通过IP地址及80端口访问站点的时候,给用户返回403 或者 444 错误(全局配置)

server { 
	listen 80 default;      
	server_name   ""  ;      
	return   444;  
}

或者

server {      
    listen 80 default;      
    server_name _;      
    return   444;  
}

或者

server {
    listen 80 default;
    return   444;
}

当用户使用https协议通过IP地址访问站点的时候,给用户返回403错误(单server_name配置)

server {
    server_name xxx.xxx.com;
    listen      443;

    .....忽略中间配置.....

    if ($host != 'xxx.xxx.com') {
        return 403;
    }
}

nginx 设置重定向的时候出现报错

./nginx -t

nginx: [emerg] unknown directive "if($host" in /etc/nginx/conf.d/phpmyadmin.conf:9

nginx.conf 的配置

server {

    server_name apeblog.cn;

    if($host!='apeblog.cn') {

        rewrite ^/(.*)$ http://www.apeblog.cn/$1 permanent;

    }

}

原因是nginx语法检测特别严格,if和后面括号以及变量等号这些元素都要有空格,所以正确的规则是:

server {

    server_name apeblog.cn;

    if ( $host != 'apeblog.cn' ) {

        rewrite ^/(.*)$ http://www.apeblog.cn/$1 permanent;

    }

}

改完 重启一下nginx 就可以了

nginx -s reload

需注意的还有 nginx的配置中不支持 if条件的逻辑或|| 逻辑与&& 运算等逻辑运算,而且不支持if的嵌套语法 否则会报错,我们可以用以下方式实现

set $flag 0;

if ( $host != 'pam.apeblog.cn' ) {

        set $flag "${flag}1";

}


if ( $host != 'www.pam.apeblog.cn' ){

        set $flag "${flag}1";

}

if ( $flag = "011" ){
        rewrite ^/(.*)$ http://www.apeblog.cn/$1 permanent;
}        
  • 13
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 前后端分离的架构中,前端代码和后端代码分别运行在不同的服务器上,前端代码通过 API 接口调用后端代码来获取数据和操作业务逻辑。因此,在前端页面中直接防止通过地址直接访问主页不是前后端分离架构需要考虑的问题。 如果你的意思是防止未经授权的用户访问前端页面,可以考虑在后端代码中进行身份验证和授权,只有经过身份验证并被授权的用户才能访问前端页面。一种常见的实现方式是使用 JSON Web Token(JWT)来进行身份验证和授权。在用户登录成功后,后端代码生成一个 JWT 并返回给前端页面,前端页面在后续的 API 调用中将 JWT 附加在请求头中发送给后端代码,后端代码根据 JWT 中的信息来验证用户身份和授权。如果 JWT 无效或已过期,则后端代码拒绝服务并返回相应的错误信息。 ### 回答2: 前后端分离是一种将前端和后端代码分开运行的架构模式,通过API接口进行数据通信。在这种架构下,前端代码和后端代码是独立的,因此可以防止通过地址直接访问主页的问题。 以下是一些可以采取的方法来防止通过地址直接访问主页: 1. 后端设置权限验证:在后端代码中,可以设置权限验证机制,确保只有经过验证的用户才能访问主页。在接口中加入认证或授权机制,例如使用Token或者Session验证用户身份。 2. 前端路由限制:在前端代码中,可以通过路由限制的方式实现对主页的访问控制。当用户直接通过地址访问主页时,前端路由系统可以拦截请求,跳转到登录页面或其他未经授权的页面。 3. 隐藏主页地址:可以在前端代码中采用混淆或加密技术,将主页的URL地址隐藏起来,使得用户无法直接通过地址栏访问到主页。这样可以增加访问主页的难度,降低未经授权访问的风险。 4. IP白名单:在后端服务器上设置IP白名单,只允许特定的IP地址访问主页。这种方法可以防止非法IP地址直接访问主页,提高系统安全性。 综上所述,为了防止通过地址直接访问主页,前后端分离架构可以通过后端权限验证、前端路由限制、隐藏主页地址和IP白名单等方式实现访问控制,保护系统的安全性。 ### 回答3: 前后端分离是将前端和后端的开发分离,前端负责展示页面和交互逻辑,后端负责处理数据和业务逻辑。在前后端分离的架构中,前端的代码和资源文件是公开可见的,因此存在通过直接访问地址的方式来访问主页的风险。 要防止通过地址直接访问主页,可以采取以下几个措施: 1. 权限验证:在后端接口中加入权限验证机制,只有经过认证的用户才能访问相关页面和接口。可以使用 JWT、Session等方式验证用户身份。 2. 路由限制:在前端路由配置中设置需要登录认证的页面地址,并在访问这些页面时进行权限验证。未经授权的用户将无法访问。 3. 服务端渲染:使用服务端渲染(SSR)技术,将主页的内容在服务器端动态生成,并返回给客户端。这样即使直接访问主页的地址,也无法获取到完整的页面内容。 4. 前端控制:在前端代码中通过条件判断和跳转逻辑,限制只有在合法情况下才能展示主页内容。例如,如果用户未登录,则跳转到登录页面或其他指定页面。 5. 反爬虫技术:采用一些反爬虫技术,如设置验证码、设置频率限制等,防止恶意的爬虫或者直接请求来访问主页。 需要注意的是,以上措施可以增加系统的安全性,但并不能完全杜绝通过地址直接访问主页的可能性。因此,在开发前后端分离的应用时,还需要综合运用多种安全技术和策略,确保系统的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值