시작하기 |
이번에는 쉬는 코너로 간단한 내용을 짚고 넘어가보자. 위에서 말한 에러란 없는 데이터를 참조햇을 때 나오는 보기 흉하고, 사용자에게 불필요하면서 공격자에게 매우 유용한 정보를 주는 페이지를 안보이게 처리하는 것이다. 예를 들어 지금까지 만든 페이지에서 카트이름에 등록되지 않는 카트를 접근하려고 했을 때, 또는 없는 책정보를 보려고 할때 다음과 비슷한 오류를 낼 것이다.
여기에는 정말 공격자가 좋아하는 소스코드의 원본이 나오며, 사용자가 정말 몰라도되는 정보가 나온다. 이를 이용하여 여러가지 공격이 가능하므로 다음과 같은 내용을 안보이게 가려줘야 한다.
예외처리하기 |
위와 같은 예외를 처리할 때에는 RecordNotFound 예외를 발생시켜서 예외사항에 대해서 처리를 해주면된다. 이는 데이터베이스에 접근하여 정보를 찾으려 하였지만 아무런 정보가 없을때 많이 이용한다.
예외를 발생시켜서 오류 메세지를 전달하여 이전페이지로 이동시키는 것이 가장 좋을 것이다. 예를 들어 carts_controller.rb의 show 함수를 다음과 같이 수정해 보았다. 일단, 코드상에서 에러가나는 지점에 가서 아이디가 없을 경우에 대해서 처리를 해주면 된다.
private # Use callbacks to share common setup or constraints between actions. def set_cart begin @cart = Cart.find(params[:id]) rescue ActiveRecord::RecordNotFound logger.error "Cart number is not accessed!" redirect_to market_index_path, notice: 'Cart number is not accessed!' else respond_to do |format| format.html # show.html.erb format.json { render json: @cart } end end end
이 결과로 오류가 나면 에러메세지를 notice라는 값에 전달하여 지정된 위치로 변경하게 한다.
마치며... |
이 것은 매우 간단해 보이기도 하지만, 매우 중요한 부분이다.
공격자로부터 공격을 막는 초석이 되는 부분이 이 부분이다. 이러한 처리는 반드시 해줘야 합니다. 또한, 개발을 모두 끝낸후에 하려면 그 양이 방대하기 때문에 보이는 족족 계속 처리해 주시는 것이 좋습니다.
간단한 내용이지만 반드시!! 3번 강조합니다!