zoukankan      html  css  js  c++  java
  • 【步入验证安全2.0时代】-极验验证

          mygod,明天就考试啦,小编这次是抱着必挂的心态去考试了,~~~~(>_<)~~~~,这个挂科的几率高达60%…..,请不要讽刺小编,因为小编是学渣

         昨天小编在群里和他们聊天,偶尔发现一个新的验证系统-极验验证,这款验证系统十分的强大,下面将由小编带领大家去认识一下吧

        下面请看一段视频:

       【视频】


     

       看完视频后,大家是不是觉得这个验证系统特别棒,更重要的是减少了我们的验证时间,避免了每次输入验证码的麻烦- -,这套系统很安全,不信你看这个:

    image

    (极验验证/网站主/客户浏览器三方的通讯时序图)

    说了这么多,发现我们忘了它的官网吧 - -,官网地址:http://www.geetest.com/

    官网里没看到帮助文档,但是看到了使用说明:http://www.geetest.com/docs/sdk/build/html/sections/total_title.html

    每种语言的demo已共享到github中,里面的代码的注释还是很全的:https://github.com/GeeTeam

    只要你申请了账号你就可以在后台进行修改验证图片,查看报表等信息…,是不是更加的人性化了,一个验证码居然如此强大 ^ _^

    在这里小编多说句,小编认为自己是个很热爱观察的人(此处应该有坏笑..),小编通过网易科技了解到极验验证(下面一段话来自网易科技):

    image

    附链接:http://tech.163.com/14/0514/16/9S7HTCH000094ODU.html

     

    由于小编比较喜欢Android,所以就学习了下Android端的极验验证,下面给予讲述(精彩内容即将开始,啦啦啦啦)

    【效果图】

    111

    【步骤】

    1 .使用的时候你需要引入极验验证的SDK(附sdk:https://github.com/GeeTeam/gtapp-android#id9)

    2.下面使用的代码为demo中的代码,只不过在里面给予修改:

       下面小编贴下代码:

    package com.gt.demo;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import org.json.JSONObject;
    
    import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.view.View;
    import android.view.Window;
    import android.view.View.OnClickListener;
    import android.widget.Toast;
    
    import com.geetest.sdk.GeetestLib;
    import com.geetest.sdk.GtDialog;
    import com.geetest.sdk.GtDialog.GtListener;
    import com.geetest.sdk.SdkInit;
    
    public class MainActivity extends Activity {
    
        private SdkInit sdkInitData = new SdkInit();
    
        // TODO get your own captcha id
        private String captcha_id = "Your captcha id";  //此处替换为你的captcha的id
        private Context context = MainActivity.this;
        private GeetestLib geetestLib = new GeetestLib();
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(R.layout.activity_main);
    
            findViewById(R.id.btn_gtapp_sdk_demo_dlg).setOnClickListener(
                    new OnClickListener() {
    
                        @Override
                        public void onClick(View v) {
                            geetestLib.setCaptchaId(captcha_id);
                            new GtAppDlgTask().execute();
                        }
                    });
        }
    
        class GtAppDlgTask extends AsyncTask<Void, Integer, Integer> {
    
            @Override
            protected Integer doInBackground(Void... params) {
                return geetestLib.preProcess();
            }
    
            @Override
            protected void onPostExecute(Integer serverStatusCode) {
    
                if (serverStatusCode == 1) {
    
                    sdkInitData.setCaptcha_id(captcha_id);
                    sdkInitData.setChallenge_id(geetestLib.getChallengeId());
                    sdkInitData.setContext(context);
                    openGtTest(sdkInitData);
    
                } else {
                    // TODO 使用自己的验证码体系来进行判断。或者不做任何处理
                    Toast.makeText(
                            getBaseContext(),
                            "Geetest Server is Down,Please Use your own system or disable the geetest",
                            Toast.LENGTH_LONG).show();
                }
            }
        }
    
        public void openGtTest(SdkInit initData) {
            GtDialog dialog = GtDialog.newInstance(initData);
    
    
            dialog.setGtListener(new GtListener() {
    
                @Override
                public void gtResult(boolean success, String result) {
                    // TODO Auto-generated method stub
                    if (success) {
    //                    
    //                    // TODO captcha
    //                    toastMsg("client captcha succeed:" + result);
    //                    // TODO If captcha is succeed on client side ,then post the
    //                    // data to CustomServer to setup the second validate
    //                    try {
    //                        JSONObject res_json = new JSONObject(result);
    //
    //                        //TODO Demo use of captcha
    //                        String custom_server_validate_url = "http://testcenter.geetest.com/gtweb/android_sdk_demo_server_validate/";
    //
    //                        Map<String, String> params = new HashMap<String, String>();
    //
    //                        params.put("geetest_challenge",
    //                                res_json.getString("geetest_challenge"));
    //                        params.put("geetest_validate",
    //                                res_json.getString("geetest_validate"));
    //                        params.put("geetest_seccode",
    //                                res_json.getString("geetest_seccode"));
    //                        String response = geetestLib.submitPostData(
    //                                custom_server_validate_url, params, "utf-8");
    //                        
    //                        toastMsg("server captcha :" + response);
    //
    //                    } catch (Exception e) {
    //                        e.printStackTrace();
    //                    }
                        toastMsg("验证成功");
                        finish();
                        Intent i=new Intent(context,SecondActivity.class);
                        startActivity(i);
                        
    
                    } else {
                        // TODO 验证失败
                        toastMsg("client captcha failed:" + result);
                    }
                }
    
                @Override
                public void closeGt() {
                    toastMsg("Close geetest windows");
                }
            });
            dialog.show();
        }
    
        private void toastMsg(String msg) {
            Toast.makeText(getBaseContext(), msg, Toast.LENGTH_LONG).show();
        }
    
    }

    【分析】

    在这部分代码中,首先通过一个按钮来实现点击事件,点击处理事件为加载一个异步操作,这个异步操作是为了实现设置captcha_id和创建验证对话框,至于异步任务吧,我相信你懂得,在异步任务中,通过检查服务器的状态来绝对是否弹出验证信息框,如果服务器返回码为1,则成功连接至服务器,然后进行打开验证框的操作,在这里我们会重写回调函数:

    image

    至此一个最基本的验证已经完成,至于添加相关的应用权限,请看下:

        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />

     

    至于如何使用极验验证官方的android sdk,请看下述:

    假设用户自建项目名称为:CustomerProject

    1. 在极验官方主页www.geetest.com注册账号并申请相应的应用公钥,id:{{id}}
    2. 将gt-android-sdk项目和CustomerProject项目Import到同一个工作空间
    3. 将gt-android-sdk项目以Android Library的方式进行引用 右键项目-Properties-Android-Library-Add即可

     

    -----------------------------------------------------------这是一条帅气的分割线-----------------------------------------------

    讲完了以后,是不是觉得这个极验验证的时候还是比较容易上手的,没错,就是比较容易上手的

    在此:小编做个宣传:

    欢迎大家加入极客学院_滨院群,在这里有美女,也有屌丝,在这里你将会一展你的风采,I Want You ^_^

    我们的群号:471647556

    我们的二维码(欢迎拿起你的手机“啪啪啪”):

    1436692747457

     

  • 相关阅读:
    linux安装memcache及memcache扩展
    jsop
    用户权限集中管理方案
    linux系统优化配置
    APICloud
    laravel中使用mgirations创建和迁移数据库
    无限分类
    laravel中的验证及利用uploadify上传图片
    Laravel框架数据库CURD操作、连贯操作使用方法
    php 将二维数组批量插入到数据库中
  • 原文地址:https://www.cnblogs.com/boy1025/p/4641210.html
Copyright © 2011-2022 走看看