精华内容
下载资源
问答
  • 如何防止接口被恶意攻击

    千次阅读 2020-03-17 00:16:40
    1、对于异常用户 ...2、对于一分钟请求次数,接口限制 每次请求判断上次是否在一分钟内,如果在一分钟内则+1次 如果超过一分钟则清0 如果一分钟请求超过一定次数,就会直接限制请求,24小时候定时解绑 ...

    1、对于异常用户

    切面处理异常,把异常用户的ip插入到数据库,当用户的请求异常次数到达一定程度时,拉入很名单

       每次请求去查询是否在黑名单中

    2、对于一分钟请求次数,接口限制

       每次请求判断上次是否在一分钟内,如果在一分钟内则+1次

                  如果超过一分钟则清0

    如果一分钟请求超过一定次数,就会直接限制请求,24小时候定时解绑

     

    展开全文
  • 关键词:短信轰炸机 短信接口验证码是网站、App...容易被攻击接口:注册时用户输入号码就可直接触发短信!最容易短信轰炸机利用,只要网站搜索引擎收录,短信轰炸机就很容易检索到注册页面。   推荐

    关键词:短信轰炸机

    短信接口验证码是网站、App校验用户手机号码真实性的首要途径,在为网站及APP提供便利的同时,手机短信验证功能也会被部分用户和短信轰炸机进行恶意利用。如何才能防止被恶意点击呢?如果您是我们的客户,请仔细阅读。

    容易被攻击的接口:注册时用户输入号码就可直接触发短信!最容易被短信轰炸机利用,只要网站被搜索引擎收录,短信轰炸机就很容易检索到注册页面。

     

    推荐的以下几种对接方式:

     

    1. 【绑定图型校验码】——将图形校验码和手机验证码进行绑定,当用户输入手机号码以后,需要输入图形校验码才可以触发短信,这样能比较有效的防止软件恶意点击。现在大型网站都采用此方式。

    如:http://reg.email.163.com/unireg/call.do?cmd=register.entrance&from=163mail_right

    2.【流程限定】——将手机短信验证和用户名注册分成两个步骤,用户在注册成功用户名密码后,下一步才进行手机短信验证。

    3.【触发条件】——用户必须填写好所有注册信息才可进行触发,注册资料不完整无法发送验证码。


    附加对接设置:

     

    4. 【短信发送间隔设置】——设置同一号码重复发送的时间间隔,一般设置为60-120秒;

    5. 【IP限定】——设置每个IP每天的最大发送量;

    6. 【发送量限定】——设置每个手机号码每天的最大发送量;

    目前我们推荐的是第1、2、3结合456的方法进行对接接口。以免短信造成不必要的浪费!

     

    温馨提示:请合作的客户做好注册页面安全工作,如出现被短信轰炸机利用问题请及时配合处理好注册安全问题。如果新客户没有更好的对接方法,请按我们所提供的方法进行对接处理,防止后期出现被攻击问题。

     

    PS:请在验证码内容最后加上退订操作,如:回复TD拒收;退订回复TD等相关内容。当非用户触发接收的短信,用户回复TD以后,平台将会将其列入拒发数据库,将会停止对该号码发送。

    关于“短信轰炸机”。

    展开全文
  • 接口防止重放攻击策略

    千次阅读 2018-07-31 08:39:48
    接口调用身份私钥签名公钥验签,这种方式既可以防止参数在传输过程中篡改,因为一旦篡改,sing签名将对应不上,调用失败; 同时使用公钥和配对的私钥进行签名和验签,保证了服务端和客户端的身份 【2】重放攻击...


    【0】使用https保证网络传输的安全;

    【1】中间人攻击防范策略:
    接口调用身份私钥签名公钥验签,这种方式既可以防止参数在传输过程中被篡改,因为一旦篡改,sing签名将对应不上,调用失败;
    同时使用公钥和配对的私钥进行签名和验签,保证了服务端和客户端的身份

    【2】重放攻击防范策略:
    客户端第一次请求使用签名sign,服务端验证通过,给客户端返回一个唯一的订单号,并将该订单号存放在redis缓存中(为了防止脏数据的挤压,给该订单号60秒的过期时间),
    客户端接收到该订单号,继续使用签名算法并带上这个订单号请求服务器,服务器验证签名,并验证订单号的存在,
    如果签名正确(保证客户端身份),同时订单号存在,则继续处理业务,并将该订单号删除,严格保证充值,消费,转账等接口不被重放;
    如果用户在第一次请求的时候被中间人拦截掉请求的所有信息,中间人伪装成客户,请求服务器,
    这个时候服务器只是返回一个订单号,因为中间人没有加密算法和公钥,所以不能成功封装第二次请求信息,

    如果用户在第二次请求的时候被中间人拦截掉请求的所有信息,中间人伪装成客户,请求服务器,
    因为服务器缓存了该订单号并且在验签成功之后业务处理完成,将该订单号删除了,所以真实客户和中间人只能有一个
    请求成功,即使中间人请求成功,请求参数也和客户是一模一样的,

    这样就保证了该接口不能被重放攻击;
    针对POS机移动设备设备,登陆成功之后,更新针对这台设备的秘钥加密之后发送给他,这样反编译获取的那个秘钥也就没用了,之后的秘钥就在内存里面更新

    为了保护接口的安全和核心代码不被二次打包,感觉客户端还是需要做些反编译的工作,这属于系统级别的安全。
    可以借助第三方安全平台:http://www.ijiami.cn/做apk加密
     

    展开全文
  • java接口防止XSS攻击的常用方法总结

    万次阅读 2018-08-16 10:46:38
    在前面的一篇文章中,讲到了java web应用程序防止 csrf 攻击的方法,参考这里 java网页程序采用 spring 防止 csrf 攻击. ,但这只是攻击的一种方式,还有其他方式,比如今天要记录的 XSS 攻击, XSS 攻击的专业解释...

    在前面的一篇文章中,讲到了java web应用程序防止 csrf 攻击的方法,参考这里 java网页程序采用 spring 防止 csrf 攻击. ,但这只是攻击的一种方式,还有其他方式,比如今天要记录的 XSS 攻击, XSS 攻击的专业解释,可以在网上搜索一下,参考百度百科的解释 http://baike.baidu.com/view/2161269.htm, 但在实际的应用中如何去防止这种攻击呢,下面给出几种办法.
    1. 自己写 filter 拦截来实现,但要注意的时,在WEB.XML 中配置 filter 的时候,请将这个 filter 放在第一位.
    2. 采用开源的实现 ESAPI library ,参考网址:https://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API

    3. 可以采用spring 里面提供的工具类来实现.

    一, 第一种方法。
    配置过滤器

    public class XSSFilter implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
        }
        @Override
        public void destroy() {
        }
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
            chain.doFilter(new XSSRequestWrapper((HttpServletRequest) request), response);
        }
    }

    再实现 ServletRequest 的包装类

    import java.util.regex.Pattern;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletRequestWrapper;
    public class XSSRequestWrapper extends HttpServletRequestWrapper {
        public XSSRequestWrapper(HttpServletRequest servletRequest) {
            super(servletRequest);
        }
        @Override
        public String[] getParameterValues(String parameter) {
            String[] values = super.getParameterValues(parameter);
            if (values == null) {
                return null;
            }
            int count = values.length;
            String[] encodedValues = new String[count];
            for (int i = 0; i < count; i++) {
                encodedValues[i] = stripXSS(values[i]);
            }
            return encodedValues;
        }
        @Override
        public String getParameter(String parameter) {
            String value = super.getParameter(parameter);
            return stripXSS(value);
        }
        @Override
        public String getHeader(String name) {
            String value = super.getHeader(name);
            return stripXSS(value);
        }
        private String stripXSS(String value) {
            if (value != null) {
                // NOTE: It's highly recommended to use the ESAPI library and uncomment the following line to
                // avoid encoded attacks.
                // value = ESAPI.encoder().canonicalize(value);
                // Avoid null characters
                value = value.replaceAll("", "");
                // Avoid anything between script tags
                Pattern scriptPattern = Pattern.compile("(.*?)", Pattern.CASE_INSENSITIVE);
                value = scriptPattern.matcher(value).replaceAll("");
                // Avoid anything in a src="http://www.yihaomen.com/article/java/..." type of e­xpression
                scriptPattern = Pattern.compile("src[\r\n]*=[\r\n]*\\\'(.*?)\\\'", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
                value = scriptPattern.matcher(value).replaceAll("");
                scriptPattern = Pattern.compile("src[\r\n]*=[\r\n]*\\\"(.*?)\\\"", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
                value = scriptPattern.matcher(value).replaceAll("");
                // Remove any lonesome  tag
                scriptPattern = Pattern.compile("", Pattern.CASE_INSENSITIVE);
                value = scriptPattern.matcher(value).replaceAll("");
                // Remove any lonesome  tag
                scriptPattern = Pattern.compile("", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
                value = scriptPattern.matcher(value).replaceAll("");
                // Avoid eval(...) e­xpressions
                scriptPattern = Pattern.compile("eval\\((.*?)\\)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
                value = scriptPattern.matcher(value).replaceAll("");
                // Avoid e­xpression(...) e­xpressions
                scriptPattern = Pattern.compile("e­xpression\\((.*?)\\)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
                value = scriptPattern.matcher(value).replaceAll("");
                // Avoid javascript:... e­xpressions
                scriptPattern = Pattern.compile("javascript:", Pattern.CASE_INSENSITIVE);
                value = scriptPattern.matcher(value).replaceAll("");
                // Avoid vbscript:... e­xpressions
                scriptPattern = Pattern.compile("vbscript:", Pattern.CASE_INSENSITIVE);
                value = scriptPattern.matcher(value).replaceAll("");
                // Avoid onload= e­xpressions
                scriptPattern = Pattern.compile("onload(.*?)=", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
                value = scriptPattern.matcher(value).replaceAll("");
            }
            return value;
        }
    }

    例子中注释的部分,就是采用 ESAPI library 来防止XSS攻击的,推荐使用.

    当然,我还看到这样一种办法,将所有的编程全角字符的解决方式,但个人觉得并没有上面这种用正则表达式替换的好

    private static String xssEncode(String s) {
            if (s == null || s.equals("")) {
                return s;
            }
            StringBuilder sb = new StringBuilder(s.length() + 16);
            for (int i = 0; i < s.length(); i++) {
                char c = s.charAt(i);
                switch (c) {
                case '>':
                    sb.append('>');// 全角大于号
                    break;
                case '<':
                    sb.append('<');// 全角小于号
                    break;
                case '\'':
                    sb.append('\\');
                    sb.append('\'');
                    sb.append('\\');
                    sb.append('\'');
                    break;
                case '\"':
                    sb.append('\\');
                    sb.append('\"');// 全角双引号
                    break;
                case '&':
                    sb.append('&');// 全角
                    break;
                case '\\':
                    sb.append('\');// 全角斜线
                    break;
                case '#':
                    sb.append('#');// 全角井号
                    break;
                case ':':
                    sb.append(':');// 全角冒号
                    break;
                case '%':
                    sb.append("\\\\%");
                    break;
                default:
                    sb.append(c);
                    break;
                }
            }
            return sb.toString();
        }

    当然,还有如下更简单的方式:

    private String cleanXSS(String value) {
                    //You'll need to remove the spaces from the html entities below
            value = value.replaceAll("<", "& lt;").replaceAll(">", "& gt;");
            value = value.replaceAll("\\(", "& #40;").replaceAll("\\)", "& #41;");
            value = value.replaceAll("'", "& #39;");
            value = value.replaceAll("eval\\((.*)\\)", "");
            value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");
            value = value.replaceAll("script", "");
            return value;
        }

    在后台或者用spring 如何实现呢:
    首先添加一个jar包:commons-lang-2.5.jar ,然后在后台调用这些函数:

    StringEscapeUtils.escapeHtml(string); 
    StringEscapeUtils.escapeJavaScript(string); 
    StringEscapeUtils.escapeSql(string);

    当然,我记得在spring 里面好像有一个 HtmlUtils.htmlEscape , 同样可以做到 过滤 XSS 攻击。从上面的介绍可以看出,防止 XSS 攻击并不难,就是要小心。

    以上内容转自https://blog.csdn.net/joeyon1985/article/details/43527987


    以下是我们项目中使用的替换XSS敏感字符的公用方法:

    	private static final String[] dangerCharacters = {"<",">","\"","\'","%","(",")","\\", "."};
    	
    	public static String filterParameter(String parameter){
    		if(StringUtils.isEmpty(parameter))return null;
    		StringBuffer sb = new StringBuffer(parameter);
    		for(String s : dangerCharacters){
    			while(sb.indexOf(s) > -1){
    				sb.deleteCharAt(sb.indexOf(s));
    			}
    		}
    		return sb.toString();
    	}

     

    展开全文
  • Java编程:API接口防止重放攻击(重复攻击

    万次阅读 多人点赞 2019-08-05 17:44:14
    我们在进行 API 接口设计时,一般都要考虑接口防止篡改攻击防止重放攻击。防篡改攻击请参考我的另一篇博客: Java编程:API接口防篡改、签名、验签原理 ,本篇文章主要介绍防止重放攻击。 重放攻击(Replay ...
  • 如何防止恶意攻击短信验证码接口

    万次阅读 2021-01-29 00:00:21
    如何防止恶意攻击短信验证码接口1 自研技术2 自研验证码破解怎么办?3 所有图形验证码都破解怎么办? 1 自研技术 1、手机号码限制:限制单个手机号码每天的最大发送次数。超过次数不能发送短信,可以考虑将手机...
  • 最近遇到一个关于防止短信验证码刷的产品设计问题,后来在面试一个前来应聘JAVA开发的程序员的时候,他也提到了他以前公司的系统也遭遇过这个刷短信的问题。因此,就“如何设计短信验证码防刷机制”作一个总结和...
  • 即生鲜电商中API接口防止参数篡改和重放攻击 目录 1. 什么是API参数篡改? 说明:API参数篡改就是恶意人通过抓包的方式获取到请求的接口的参数,通过修改相关的参数,达到欺骗服务器的目的,常用的防止篡改的方式...
  • 防止恶意攻击短信验证码接口方法

    万次阅读 2017-07-12 16:46:00
    防止恶意攻击短信验证码接口方法、短信运营商调研选型
  • 但是,最近有很多用户莫名收到各类注册短信、验证短信等,技术人员排查,发现是短信验证码接口被恶意攻击了,导致验证码接口被刷。那么该如何避免刷呢? 一、短信验证码接口是怎么恶意攻击的(短信接口被刷) ...
  • 说明:目前所有的系统架构都是采用前后端分离的系统架构,那么就不可能避免的需要服务对外提供API,那么如何保证对外的API的安全呢?即生鲜电商中API接口防止参数篡改和重放攻击目录1. 什...
  • 防止短信接口验证码恶意攻击

    千次阅读 2018-10-31 13:36:31
    一、易遭恶意使用的场景或网站 ... ... ...(1)短信发送间隔设置——设置同一号码重复发送的时间间隔,一般设置为60-...(5) 绑定图型校验码——将图形校验码和手机验证码进行绑定,这样能比较有效的防止软件恶意注册。
  • 最近遇到一个关于防止短信验证码刷的问题,相信很多朋友也遭遇过这个刷短信的问题。因此,就“防止验证码短信被盗刷”作一个总结和分享。 1、短信验证码是什么? 1.短信验证码是什么: 短信验证码是通过发送...
  • API接口防止参数篡改和重放攻击

    千次阅读 2019-04-08 10:39:37
    {近期领导要求我对公司业务的支付类的ocr接口做研究,是否存在支付接口重放攻击,so。。。。。} API重放攻击(Replay Attacks)又称重播攻击、回放攻击。他的原理就是把之前窃听到的数据原封不动的重新发送给接收方...
  • 如何防止别人恶意攻击调用API接口

    千次阅读 2018-09-27 21:10:31
    1 / 验证码(最简单有效的防护),采用点触验证,滑动验证或第三方验证码服务,普通验证码很容易破解 2 / 频率,限制同设备,同IP等发送次数,单点时间范围可请求时长 3 / 归属地,检测IP所在地是否与手机号归属...
  • 网站接口被恶意攻击怎么办

    千次阅读 2018-09-27 21:20:30
    目前攻击最常见的就是“短信轰炸机”,由于短信接口验证是App,网站检验用户手机号最真实的途径,使用短信验证码在提供便利的同时,也成了呗恶意攻击的对象,那么如何才能防止被恶意调用呢? 1.图形验证码: 将图形...
  • 重放攻击(Replay Attacks)又称重播攻击、回放攻击,是指攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的正确性。重放攻击可以由发起者,也可以由拦截并重发该数据的...
  • 短信接口被攻击的那些经历

    千次阅读 2016-07-01 17:26:35
    短信接口被攻击的那些经历 前几天项目的短信接口被攻击了. 一天内把短信余额全部用完. 这里记录下修复漏洞过程,思路. 查阅了网络上的各种经验,都觉得不错,但是根据自身实际情况出发.不完全采用网络上相同处理...
  • 如何防止接口被恶意访问

    千次阅读 2014-03-21 15:53:45
    1. 将js代码压缩,使得代码变得不易阅读。 2. 在接口中判断访问来源,例如php使用HTTP_REFERER来判断来源,如果是...3. 将接口数据在php页面中动态加密后传给js文件,然后由js提交参数给接口接口解密后处理数据。
  • 1.Session检查防止攻击: function checkusersession(){  $sid = cookie('sid');  if($sid === null)   {  $obj['result'] = -1;  echo json_encode($obj);  exit();  }else{  $
  • 例如有些接口是提取信息的,如果有人抓包重复请求,估计server会崩溃。还有一些涉及到金额交易的接口,必须保证不能重复提交,请问有什么比较好的解决方案?
  • java面试(1)如何防止恶意攻击短信验证码接口

    千次阅读 多人点赞 2021-01-28 22:02:16
    如何防止恶意攻击短信验证码接口1 自研技术2 自研验证码破解怎么办?3 所有图形验证码都破解怎么办? 1 自研技术 1、手机号码限制:限制单个手机号码每天的最大发送次数。超过次数不能发送短信,可以考虑将手机...
  • 在项目上线后,后台接口很容易通过抓包工具看到, 难免人为构造恶意请求攻击我们的系统,相信大家都或多或少都遇到过短信验证码刷、疯狂留言灌水、数据恶意爬取等问题,这种直接抓接口然后写个循环调用的行为...
  • 给公司或个人造成大量的金钱损失,造成这种情况原因主要是在产品实际设计过程中,有些产品人员因为对技术实现不太了解,防范意识薄弱,简单或直接忽略对短信验证码进行限制,这才造成短信接口恶意不法分子利用。...
  • (转)API接口防止参数篡改和重放攻击

    千次阅读 2018-08-18 23:05:58
    HTTPS并不能防止这种攻击,虽然传输的数据是经过加密的,窃听者无法得到数据的准确定义,但是可以从请求的接收方地址分析出这些数据的作用。比如用户登录请求时攻击者虽然无法窃听密码,但是却可以截取加密后的口令...
  • 幂等性: 接口重复调用(http延时机制) 及 表单重复提交 项目demo: ...提取码:locz 效果展示: 访问 /test 每次调用生成唯一token ...防止了重复提交问题 远程rpc接口同理,token 放入 http 请求头 在此处判断是...
  • 用https是我想到的办法,但是不知道怎么实现,所以就考虑用token,虽然不是绝对有效,但是能防止一般的用户来攻击,高手非要攻击,只能报警了吧。 token=“$(参数md5|按一定规则修改的字符串|时间戳|用户Id)$”=...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 56,002
精华内容 22,400
关键字:

怎么防止接口被攻击