본문 바로가기
CS/Secure

[Secure Coding] 해킹방지 코드짜기

by JiGyeong 2016. 4. 27.
1
2
3
4
5
6
7
8
9
10
11
12
13
@RequestMapping("/attack/encoding/method1")
    public String encodingMethod1(HttpServletRequest request, HttpServletResponse response) {
        
        String textData = request.getParameter("text");
        System.out.println("Encoding 전 : " + textData);
        
        // URLDecoder 를 이용한 Encoding
        textData = URLDecoder.decode(textData);
        
        System.out.println("Encoding 후 : " + textData);
        
        return "attack/encoding/encoding";
    }
cs





Base64 인코딩을 하게 해주는 "webtoolkit.base64.js"


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@RequestMapping("/attack/encoding/method2")
    public ModelAndView encodingMethod2(HttpServletRequest request, HttpServletResponse response) {
        
        String textData = request.getParameter("text");
        System.out.println("Decoding 전 : " + textData);
        
        // Base64Decoder를 이용한 Decoding
        BASE64Decoder baseDecoder = new BASE64Decoder();
        
        try {
            byte[] decodeByte = baseDecoder.decodeBuffer(textData);
            textData = new String( decodeByte );
        } catch (IOException e) {
            throw new RuntimeException(e.getMessage(),e);
        }
        
        System.out.println("Decoding 후 : " + textData);
        
        ModelAndView view = new ModelAndView();
        view.setViewName("attack/encoding/encoding");
        view.addObject("inputValue", request.getParameter("text"));
        view.addObject("result", textData);
        
        return view;
    }
 
cs

암호화된 파일을 db에 넣을때 사용




paros의 Tools -> Encoder/Hash에서 내가 걸고싶은 해킹 코드를 적고 URLEncode를 누르면

아래와 같이 코드가 변환되어 나온다.

이것을 url에 넣어서 보내주면 된다.





<script>하고 해킹코드를 쓰는 것을 막기위해 script를 방지하기는 Script sCript sCriPt등 막을 변수가 많기때문에

<만 막도록해본다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
@RequestMapping("/attack/encoding/method3")
    public ModelAndView encodingMethod3(HttpServletRequest request, HttpServletResponse response) {
        
        ModelAndView view = new ModelAndView();
        view.setViewName("attack/encoding/encoding");
        
        view.addObject("inputValue2", request.getParameter("text"));
        
        String textData = request.getParameter("text");
        System.out.println("Encoding 전 : " + textData);
        
        //FIXME URLEncoder를 이용한 Encoding과 HTML Encoding
        // URLEncoding
        textData = URLEncoder.encode(textData);
        
        System.out.println("URL Encoding 후 : " + textData);
        view.addObject("result2_1", textData);
        
        textData = request.getParameter("text");
        // HTML Encoding
        textData = textData.replace("<""&lt;");
        textData = textData.replace(">""&gt;");
        textData = textData.replace("&#60""&lt;");
        textData = textData.replace("&#62""&gt;");
        textData = textData.replace("&#x3c""&lt;");
        textData = textData.replace("&#x3e""&gt;");
        textData = textData.replace("&#X3c""&lt;");
        textData = textData.replace("&#X3e""&gt;");
        textData = textData.replace("&#x3C""&lt;");
        textData = textData.replace("&#x3E""&gt;");
        textData = textData.replace("&#X3C""&lt;");
        textData = textData.replace("&#X3E""&gt;");
        
        System.out.println("HTML Encoding 후 : " + textData);
        
        view.addObject("result2_2", textData);
        
        return view;
    }
 
cs


<로 들어오는 모든 코드를 인코딩시켜 해킹을 막는다.


jsp에

입력값 : <c:out value="${inputValue2}" /> 로 써줘도 해킹 반은 막고 들어간다.