마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

취약점 경고를 받았습니다. app.MainActivity->OpenCALLBACK_URL

0 추천

app.MainActivity->OpenCALLBACK_URL

 

어떤 문제 때문일까요?

 

		// 로딩 표시
		MyProgressDialog = ProgressDialog.show(this, getResources().getString(R.string.dialog_loading), getResources().getString(R.string.dialog_loading_summary), true);

		// 페이지 읽기
		if(GlobalFunctions.IsOnline(this.getApplicationContext()) == true){
			// 콜백 존재 검사
			if(getIntent().getExtras() != null && getIntent().getExtras().containsKey(ParseCustomReceiver.EXTRA_CALLBACK_URL)) {
				// 콜백된 주소 검사 및 주소로 이동
				OpenCALLBACK_URL(getIntent());
			}
			else
			{

 

	// 콜백된 주소로 이동 함수
	public static void OpenCALLBACK_URL(Intent intent) {
		Bundle extras = intent.getExtras();
		if(extras != null) {
			if(extras.containsKey(ParseCustomReceiver.EXTRA_CALLBACK_URL)) {
				String MyURL = intent.getExtras().getString(ParseCustomReceiver.EXTRA_CALLBACK_URL);
				if(MyURL != null) {
					// ParseCustomReceiver 클래스의  마지막 알림 주소를 사용
					// 콜백 주소가 존재하는 경우 해당 페이지로 바로 이동
					MyWebView.loadUrl(MyURL);
				}

				// - ParseCustomReceiver 글로벌 변수 초기화
				ParseCustomReceiver.NOTIFICATION_COUNT = 1;
			}
		}
	}

 

botserv (210 포인트) 님이 2019년 9월 5일 질문

1개의 답변

0 추천

webview 자바스크립트 쪽 보안 문제일듯 합니다. 아래를 참조 해 보세요.

https://support.google.com/faqs/answer/9095419?hl=ko

https://j-a-l.tistory.com/83

익명사용자 님이 2019년 9월 6일 답변
대략적으로 아래 코드에 보안 문제가 될만한 소스가 있을까요?

        // 컨트롤 연결
        isActive = true;
        MyActivity = this;
        MyWebView = (WebView) findViewById(R.id.MyWebView);

..


        // WebView 설정
        this.registerForContextMenu(MyWebView);
        MyWebView.requestFocus(View.FOCUS_DOWN);
        MyWebView.getSettings().setJavaScriptEnabled(true);
        MyWebView.getSettings().setUseWideViewPort(true);
        MyWebView.getSettings().setSaveFormData(true);
        MyWebView.getSettings().setAppCacheEnabled(true);
        MyWebView.getSettings().setDatabaseEnabled(true);
        MyWebView.getSettings().setDomStorageEnabled(true);
        MyWebView.getSettings().setLightTouchEnabled(true);
        MyWebView.getSettings().setSavePassword(true);
        MyWebView.getSettings().setPluginState(PluginState.ON);
        MyWebView.getSettings().setLoadWithOverviewMode(true);
        MyWebView.getSettings().setSupportZoom(true);
        MyWebView.getSettings().setBuiltInZoomControls(true);
        StringBuffer userAgent = new StringBuffer(MyWebView.getSettings().getUserAgentString());
        userAgent.append(";" + "ClubSound");
        MyWebView.getSettings().setUserAgentString(userAgent.toString());
        MyWebView.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT");

        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
            MyWebView.getSettings().setDisplayZoomControls(false);
        }
        MyWebView.setOnTouchListener(new View.OnTouchListener()
        {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction())
                {
                    case MotionEvent.ACTION_DOWN:
                    case MotionEvent.ACTION_UP:
                        if (!v.hasFocus())
                        {
                            v.requestFocus();
                        }
                        break;
                }
                return false;
            }
        });
        MyWebView.setWebViewClient(new WebViewClientClass());
        mWebChromeClient = new MyWebChromeClient();
        MyWebView.setWebChromeClient(mWebChromeClient);
        MyWebView.setDownloadListener(new DownloadListener() {
            @Override
            public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
                // - 파일 다운로드 처리
                MyDownloadManager.StartDownload(url, contentDisposition, mimetype);
            }
        });

        // 로딩 표시
        MyProgressDialog = ProgressDialog.show(this, getResources().getString(R.string.dialog_loading), getResources().getString(R.string.dialog_loading_summary), true);

        // 페이지 읽기
        if(GlobalFunctions.IsOnline(this.getApplicationContext()) == true){
            // 콜백 존재 검사
            if(getIntent().getExtras() != null && getIntent().getExtras().containsKey(ParseCustomReceiver.EXTRA_CALLBACK_URL)) {
                // 콜백된 주소 검사 및 주소로 이동
                OpenCALLBACK_URL(getIntent());
            }
            else
            {
                // 오브젝트 아이디 등록 및 메인 페이지 호출
                Runnable runnable = new Runnable() {
                    @Override
                    public void run() {
                        SetObjectID();
                    }
                };
                new Thread(runnable).start();
            }
        } else {
            final Activity TempActivity = this;
            AlertDialog.Builder alert = new AlertDialog.Builder(this);
            alert.setTitle(getResources().getString(R.string.dialog_network));
            alert.setMessage(getResources().getString(R.string.dialog_network_summary));
            alert.setCancelable(false);
            alert.setPositiveButton(getResources().getString(R.string.dialog_network_close), new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int whichButton) {
                    TempActivity.finish();
                }
            });
            alert.show();
            Log.d("디버그", "C");
        }
    }

..


    // WebView 페이지 이동 처리
    private class WebViewClientClass extends WebViewClient {
        @Override
        public void onPageFinished(WebView view, String url) {
            MyWebView.loadUrl("javascript:window.HTMLOUT.processHTML('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
        }
...