zoukankan      html  css  js  c++  java
  • java web项目请求控制及简单漏洞防范

    背景:当时项目没用什么框架,过滤器,请求限制等都需要自己手写。

    1、请求加时间戳

      在后台过滤器中可以加判断,如果请求时间戳与服务器时间相差太大,可以返回异常,具体情况可以具体使用。

      请求中加时间戳的示例如下:

      ①form表单提交,在表单内加隐藏域,通过js代码给id赋值。

    <input id="curdate" name="curdate" type="hidden" />
    $("#curdate").attr("value",timestamp);

      ②ajax请求后台

    var timestamp =(new Date()).valueOf();            
    var data={"a":a,"b":b,"curdate":timestamp};

    2、jsp获取数据需要验证

      例以下代码可能存在漏洞:

    <% String eid = request.getParameter("eid"); %>
    ...
    Employee ID: <%= eid %>  

      如果 eid 只包含标准的字母或数字文本,这个例子中的代码就能正确运行。如果 eid 里有包含元字符或源代码中的值,那么 Web 浏览器就会像显示 HTTP 响应那样执行代码。  

      起初,这个例子似乎是不会轻易遭受攻击的。毕竟,有谁会输入导致恶意代码的 URL,并且还在自己的电脑上运行呢?真正的危险在于攻击者会创建恶意的 URL,然后采用电子邮件或者社会工程的欺骗手段诱使受害
    者访问此 URL 的链接。当受害者单击这个链接时,他们不知不觉地通过易受攻击的网络应用程序,将恶意内容带到了自己的电脑中。这种对易受攻击的 Web 应用程序进行盗取的机制通常被称为反射式 XSS。

      所以需要将数据过滤,使用c标签,再加上自定义el表达式,过滤特殊字符。最终代码如下:

    <input type="hidden" name="cons_no" value="<c:out value='${ff:filter(cons_no)}'/>"/>

    ①引入c标签

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

    ②自定义el函数

      1在任意位置写一个过滤方法  

    public class ELFilter {
        
        public static String filter(String message){
            if(message==null){
                return null;
            }
            //结合实际,数据都为简单的数字或者字母汉字,不会出现特殊符号,把以下特殊字符直接抹掉
            message = message.replace("<", "");
            message = message.replace(">", "");
            message = message.replace("?", "");
            message = message.replace("#", "");
            message = message.replace("$", "");
            message = message.replace("&", "");
            message = message.replace("%", "");
            message = message.replace("
    ", "");
            message = message.replace(""", "");
            message = message.replace("'", "");
            message = message.replace("{", "");
            message = message.replace("}", "");
            return message;
        }
    }

      2在项目WEB-INF下创建 elfilter.tld 文件,内容如下:

    <?xml version="1.0" encoding="UTF-8" ?>  
    <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"  
        version="2.0">  
        <tlib-version>1.0</tlib-version>  
        <jsp-version>2.0</jsp-version>  
        <short-name>function</short-name>  
        <uri>/WEB-INF/elfilter.tld</uri><!-- 此uri好像随便写,只要与页面引用时一致就可以 -->
        <function>  
            <name>filter</name>  
            <function-class>com.a.b.util.elecheat.ELFilter</function-class>  
            <function-signature>java.lang.String filter(java.lang.String)</function-signature>  
        </function>  
    </taglib>

      3前台引用

    <%@ taglib prefix="ff" uri="/WEB-INF/elfilter.tld"%>

          参考:自定义el函数    使用JSTL标签需要的JAR包和JSP页面的引用   自定义EL函数防止HTML注入

     3、隐藏http响应头中的nginx或者apach版本信息

      tomcat

      修改之前   Server:Apache-Coyote/1.1  ,泄露了当前容器的类型,可能会被针对攻击

      修改方法:
      在tomcat的conf路径下,server.xml中,
      <Connector port="8080" protocol="HTTP/1.1"  connectionTimeout="20000"  redirectPort="8443" server="自定义信息"/>

      nginx

      修改nginx.conf 

      http {
        ……
        server_tokens off; ->即可隐藏版本号
        …….
      }

    4、----

    java web开发常见漏洞攻击及解决办法

    .Header Manipulation漏洞

    ---禁制除get、post外其他的访问方式

    ---限制同一ip访问频率

    ---前后台数据获取时加入验证或者过滤

    ---cookie安全   COOKIE安全与防护

    ---http头信息

     

     给url加时间戳,骗过浏览器缓存

  • 相关阅读:
    redis 资料
    php 安装redis php扩展
    Unity生命周期
    疫情下的大学生人格发展研究
    对联一句——百花深处
    Unity实现byte[]合成图像
    Unity实现精灵资源动态加载
    数据结构与算法初步
    Unity中激活子物体
    C#实现自定义列表
  • 原文地址:https://www.cnblogs.com/xinzhisoft/p/10226638.html
Copyright © 2011-2022 走看看