2010-04-19 7 views
1

어제 질문을 올렸지 만 XSS에 대한 예방의 첫 번째 줄로 일부 JavaScript를 작성했습니다. 그러나 내 라이브 서버에서 이것을 테스트 할 때 자바 스크립트가 PHP 섹션을 잡는 것처럼 잘못된 입력을 잡습니다. 내 양식은 게시물을 사용하고 PHP는 내 양식 항목에 없습니다 (입력하지 않았습니다). 이것은 양식 활동 또는 무엇인가를 집어 올릴 수 있습니까? 나는 열심히 노력하고있다. 어떤 아이디어라도된다.내 양식이 해킹 될 수 있습니까?

여기는 내 코드이다. 제출 버튼에서 트리거된다.

function validateForBadNess(){ 

var theShit = new Array("*","^", "$", "(",")","{", "}","[", "]","\\", "|", "'","/","?",",","=",">","gt","lt", "<","script","`","´","php"); 
var tagName = new Array(); 

tagName[0] = "input"; 
tagName[1] = "select"; 
tagName[2] = "textbox"; 
tagName[3] = "textarea"; 

for (ms=0;ms<tagName.length;ms++){ 

// loop through the elements of the form 
var formItems = document.getElementsByTagName(tagName[ms]); 

    for (var xs=0;xs<formItems.length;xs++){ 

    var thisString = formItems[xs].value; 

    // loop through bad array 
    for (zs in theShit){ 

    //alert(thisString + " " + thisString.indexOf(theShit[zs])) 
    if(thisString.indexOf(theShit[zs]) >= 0){ 

    alert("Sorry but the following character: " + theShit[zs] + " is not permitted. Please omit it from your input.\nIf this is part of your password please contact us to heave your password reset.") 
    return false; 

    } 

    } 



    // loop for formitems 
    } 

// tagName toop 
} 
// original condition 
} 
+0

다른 사람들은 올바른 방향으로 여러분을 지적했지만, 저는 여러분이 이것과 같은 것을하려고한다면 여러분이하는 일이 꽤 지저분하고 불필요하다는 것을 말하고 싶었습니다. 대부분의 코드는 비교적 단순한 정규 표현식으로 대체 될 수 있으며 배열 등의 복잡한 설정이 필요하지 않습니다. – MisterMister

+0

"다음 문자 :"+ theShit [zs] + "는 허용되지 않습니다. 다른 하나를 해킹 해보십시오. 제안을 받고 싶다면 'KEVIN MITNICK'라고 소리내어 말하십시오. " xD –

답변

5

당신이하는 일은 공격에 대한 보호면에서 전혀 필요없고 쓸모가 없습니다. 자바 스크립트 기반의 "보호"는 수초 내에 우회 될 것이며 합법적 인 사용자는 예를 들어 $ 기호를 사용할 수 없을 것입니다. 항상 들어오는 모든 데이터가 일 수 있다고 가정하면이 변경되었습니다.

이 서버 측에 데이터를 출력 할 때 조심해야합니다. 들어오는 텍스트 데이터에 htmlspecialchars()을 사용하십시오. 들어오는 HTML이 있다면 "cleaned"가 필요합니다. Sarfraz가 제안한 HTML 정제기를 사용하십시오.

관련 SO 읽기 : 서버에 입력 유효성 검사를 할 필요가

5

HTML Purifier 대신 유명 사용하지 않는?

HTML 정수기는 PHP로 작성된 HTML 필터 라이브러리입니다. HTML 정수기가 아니라, 은 또한 당신의 문서, 포괄적 만 달성 뭔가 표준 준수 확인하는 철저하게 감사,
보안 아직 허용 허용 된 사이트 목록과 (더 나은 XSS이라고도 함) 모든 악성 코드를 제거하지 않습니다 W3C의 사양에 대한 지식.
결함이 있거나
안전하지 않은 HTML 필터로 인해 BBCode를 사용하는 데 지치셨습니까?
WYSIWYG 편집기가 있지만 에 사용할 수 없었습니까? 고품질을 찾으려면 표준 호환, 오픈 소스 해당 응용 프로그램의 구성 요소 을 만드시겠습니까? HTML 정수기는 에 있습니다!

2

. 공격자는 브라우저와 자바 스크립트를 완전히 우회하면서 요청을 보낼 수 있습니다. 안전하게 입력을 필터링하려면 서버 측에서 입력을 필터링해야합니다.

좋은 방법은 PHP의 filter extension을 사용하는 것입니다.

입력을 다시 표시하려면 htmlspecialchars()을 사용하십시오.

관련 문제