22018, 1/1101 회원가입  로그인  
   xornrbboy
   sql injection, xss 근본적인 해결방안...

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=31495 [복사]


제가 2012년도에 나름대로 sql injection, xss의 근본적인 해결방안에 대해서 생각해봤었던게 있는데요.
다시 한번 해커스쿨 여러분들의 의견을 듣고싶습니다.

http://blog.naver.com/xornrbboy/90172933582 에 문서로 정리해놓았습니다.

제가 생각하기에 sql injection의 근본적으로 발생하는 이유는 사용자가 입력한 data가 query의 구조?에 영향을 미치기 때문입니다.
즉 가장기본적인 예로서..
select * from database where id='$id' and pw='$pw'
란 쿼리가 있으면
$id 에
1' or '1'='1' #
이렇게 입력이 되면
select * from database where id='1' or '1'='1' # ' and pw='$pw'
이렇게 query의 구조를 완전히 바꾸기 때문에 발생하는 문제라고 생각했습니다.
그래서 저는 사용자가 입력한 data가 무엇이든지 query의 구조는 바뀌지 않도록 하면 된다고 생각했습니다.

그리고 xss의 경우도 사용자가 입력한 문자열에 태그가 들어가 있어서 문제가 발생하므로
사용자가 입력한 data가 html의 구조를 바뀌게 하지 않도록 하면 된다고 했습니다.
참고로 제가 문서에 써놓은 방법은 약간 문제가 있더라고요..
1. <data>태그가 <html>태그 보다 앞에 와야만하고
2. <data></data><data></data>같이 2개의 태그가 올수 없고 무조건 <data></data> 이렇게 하나만 있어야하고
3. 비완성된 data태그. 즉
<data>.....(내용생략)...
.....(내용생략)... </data>
<data>.....(내용생략)...</data></data>
같은 것들은 절대 허용하지 않는다.
라는 3가지 규칙이 추가된다면 전혀 문제가 없을 것같습니다..
(<data>는 제가 만들어낸 가상의 태그입니다.)

음... 결국 핵심은 data가 query의 구조?에 영향을 끼칠 수 없고, data가 html의 구조에 영향을 끼칠수 없게 해서
data에 작은 따옴표가 오든 < 같은게 오든 뭐가 오든지 상관없도록 하는것입니다.
사용자가 입력한 것들은 오직 data로써 따로 관리되도록 하는것이죠.

해쿨 여러분들은 어떻게 생각하시는지 궁금합니다..




  Hit : 10833     Date : 2014/01/12 10:45



    
blueh4g sql injection 을 막는 방법은 말씀하신대로가 맞습니당~ 사용자의 입력이 쿼리에 영향을 미치지 않게 하면 되는거죠..
근데 그렇게 하는게 어려워서 문제죠 = ㅅㅠ
사실, prepared statement 같이 각 데이터를 바인딩해서 쓰도록 하면 어느정도 방비는 되는데, 개발자가 귀찮아지죠.. (항상 필터링 하나 더 넣으면 될껄, 귀찮다고 안넣어서 생기는 취약점들;;)

그리고 아래 data 의 경우에도, 공격자가 입력을 </data><query><data> 라고 넣으면 여전히 공격이 될거 같구요..
사실, 위에서 말씀하신 <data> 와 같은 역할을 하는게 이미 <xmp> 태그라고 존재하긴 합니다 ;ㅁ;
더욱이, 네이버도 그렇고 많은 사이트들에서는 단순히 글만 입력하는게 아니라, 이미지 삽입 등 에디터를 지원하는 경우가 많은데, 이럴땐 태그를 못막는 상황에서 xss를 막아야 한다는 제한이 생기죠 ㅠㅠ
2014/01/13  
$Zero 물론 말씀하신대로막으면 다 막히겠죠.. 다만, 개발하다보면 생각지 못하는 부분이 생기기도 하고
귀찮아서 대충 넘어가버리거나 잘 알지 못하는 부분은 손도 안댄다는 것이 가장 큰 문제죠. 여럿이서 프로젝트를 진행하다보면 다른 사람이 만든 API나 모듈을 상세하게 분석하지 않는경우가 많은데 그런곳에서 많은 취약점이 발견되기도 합니다.

개발자가 신경만쓴다면 미연에 방지할 수 있지만 모든 것을 다 신경쓰기에는 귀찮기도하고 완벽히 100% 다 처리하기란 쉽지 않은 일이죠.
그래서 웹 필터나 웹 방화벽같은 보안 솔루션을 이용하는 경우도 많습니다.
2014/01/13