이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 12385|회답: 0

[통신] 2011년 MSSQL 문장 비밀번호 검증 보안 취약점 튜토리얼

[링크 복사]
게시됨 2014. 11. 26. 오후 3:47:51 | | |
국제 표준 데이터베이스 쿼리 문으로서, SQL 문은 다양한 프로그래밍 환경에서 널리 사용되어 왔습니다. 성숙하고 안정적인 시스템으로서 사용자 로그인과 비밀번호 인증은 필수적입니다. 일상적인 프로그래밍 작업에서 많은 프로그래머들이 SQL 문장을 사용해 사용자 비밀번호를 다음과 같은 문장으로 확인하는 것을 발견했습니다:
sql="name = "+name+"' and password='"+password+"'' 사용자 테이블에서 * 선택하세요"
이름과 비밀번호는 사용자가 입력한 사용자 이름과 비밀번호이며, 위의 문장들은 사용자와 비밀번호가 정당하고 정당한지 검증하기 위해 실행됩니다. 하지만 분석을 통해 위 진술들에는 치명적인 허점이 있음을 알 수 있습니다. 사용자 이름에 다음 문자열을 입력한 후 비밀번호를 아무렇지 않게 입력하면 aaaa로 설정합니다. 변수가 교체된 후 SQL 문은 다음과 같은 문자열이 됩니다:
sql="name ='111' 또는 '1=1' 그리고 password='aaaa'
우리는 모두 알고 있습니다. select 문이 쿼리 조건을 판단할 때, 또는 (또는 ) 연산을 만날 때 다음 및 (and) 연산을 무시하며, 위 문장에서 1=1 값이 항상 참임을 의미합니다. 즉, 비밀번호에 어떤 값을 입력하든 위 비밀번호 검증을 통과할 수 있다는 뜻입니다! 이 문제에 대한 해결책은 매우 간단하며, 여러 방법이 있습니다. 가장 일반적으로 사용되는 방법은 검증 전에 사용자가 입력한 비밀번호와 사용자의 정당성을 판단하는 것이고, 싱글 따옴표나 등호와 같은 특수 문자는 허용되지 않습니다.
위의 문제들은 단순해 보일 수 있지만 실제로 존재합니다. 예를 들어, 인터넷의 유명한 온라인 게임 "Smiling Proud Jianghu" 초기 버전에는 이런 문제가 있었고, 저자는 이 게임에 대한 취약점 보고서를 읽고 이전에 작성한 프로그램들을 면밀히 분석해 보니 많은 허점이 있었습니다. 이게 정말 우리의 관심거리야. 이는 저자를 포함한 젊은 프로그래머들의 프로그래밍 경험과 보안 인식 부족을 드러낸다. 동시에, 프로그래머는 프로그램 설계 시 프로그램의 보안을 충분히 고려해야 하며, 부실하게 행동해서는 안 되며, 겉보기에는 작은 누락이 심각한 결과를 초래할 수 있음을 상기시켜 줍니다.




이전의:SQL 2005 데이터베이스 보안 및 참조 무결성
다음:2011 MSSQL 시스템 보안 SA 약한 비밀번호 보안 위험 튜토리얼
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com