본문 바로가기

보안/시큐어코딩

[시큐어코딩실습] 스레드 동기화 취약점 제거 코드예

------------------------------------------------------------------------------------------------

thread safe 테스트를 위한 요청을 위한 test.jsp 수정

------------------------------------------------------------------------------------------------


   <div class="hint">

       <form action="thread_test.do"  id="form10">

          (10) Thread Safe 테스트: <input type="text" name="data"  id="data10">

          <input type="button" id="button10" value="실행"  >

          Thread 공유 count값 테스트.

        </form>

    </div>


   . ..  .


  $('#button10').click( 

  function() { 

      var formData = $("#form10").serializeArray();  

    var URL = $("#form10").attr("action");  

    $('#result').empty(); 

    $.post(URL,formData,   

    function(data, textStatus, jqXHR)     {                         

                $('#result').append(data); 

         } 

          ).fail(function(jqXHR, textStatus, errorThrown) {   

            $('#result').append("요청처리 실패"); 

              }); 

  });


------------------------------------------------------------------------------------------------

thread safe 테스트를 위한 요청을 위한 TestController.java 코드 수정

------------------------------------------------------------------------------------------------


@Controller
public class TestController {
int count;

        . . . . .

@RequestMapping(value="/test/thread_test.do", method = RequestMethod.POST)

@ResponseBody

public String testThreadSafe(HttpServletRequest request) {

StringBuffer buffer=new StringBuffer();

String data=request.getParameter("data");

int c= Integer.parseInt(data);

        doSomething(c);

buffer.append("count= "+count);     

return buffer.toString();

}

public syncronized void doSomething(int cnt){

count += cnt;

try {

Thread.sleep(cnt*1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}