2012-05-11 5 views
0

현재 서버의 로그 분석 스크립트에서 작업 중이며 사용자가 악의적 인 명령을 입력하지 못하게하려면 영숫자 문자를 제외한 모든 문자를 필터링해야합니다 입력 된 문자열에서 밑줄을 허용하면서) 불행히도이 작업을 수행하는 방법을 모르기 때문에이 작업을 수행하기 위해 수행 할 작업을 누군가에게 알려줄 수 있는지 궁금한 점이 많습니다. 감사합니다. 또한 예를 들어 누군가 다음과 같이 입력한다고 가정 해 봅시다 : stack # @ _ over % flow, 프로그램은 stack_overflow를 생성하기 위해 영숫자가 아닌 문자 (밑줄 제외)를 필터링합니다. bash에서 이에 해당하는 값은어떻게 문자를 필터링하여 영숫자 문자 만 허용 할 수 있습니까?

입니다. "!" "! -bash :"A는 문자열에 포함 된 경우
tr -dc [:alnum:]'_' 

또한, 내가 얻을 나는 다음을 시도 언급,하지만 여전히 예를 들어 (일부 문제가 발생하는 것을 잊었다 이벤트는 "

를 찾을 수 없음
#include <stdio.h> 
#include <string.h> 
#include <ctype.h> 
int main(int argc, char ** argv) { 
    int i; 
    char *p; 
    if (argc > 1) { 
     for (p = argv[1]; *p != '\0'; p++) { 
      if (islower(*p) || isdigit(*p) || *p == '_') { 
       putchar (*p); 
      } 
     } 
     putchar ('\n'); 
    } 
    return 0; 
} 
+0

나는 또한 다음과 같은 시도를했다. 그러나 여전히 문제가있다. (위의 그림을 편집한다.) – lacrosse1991

+0

프로그램을 호출 할 때 bash에서 오류가 발생한다면 (isalnum을 사용할 수 있다는 점만 제외하면 괜찮아 보인다.), 프로그램 인수를 작은 따옴표로 묶으십시오. –

답변

3

처리중인 문자열의 길이를 찾고, 그 길이의 새 문자열을 할당하고, 입력 문자열의 모든 문자를 반복하고, 그것이 alpha 인 경우 ic (ctype.h의 isalnum() 사용) 결과 문자열에 문자를 넣습니다. 그렇지 않으면 건너 뜁니다. Null을 끝내고 결과 문자열을 입력 문자열에 복사하고 할당 된 문자열을 비우고 결과를 반환합니다.

+0

감사합니다! 함께 일할 수있는 기반을 마련했습니다. – lacrosse1991

0

정규식 (정규식)은이를 수행하는 좋은 방법입니다. 여기에 an example이 있습니다.

관련 문제