2012-02-08 2 views
2

그래서 James Patterson은 계속해서 내 웹 사이트를 해킹하려고 노력하고 있습니다! 그래, 실제로는 아니지만 그는 "Kill"으로 시작하는 도서 목록을 작성하여 서버 측 방화벽에서 HTTP 501/HTTP 505을 트리거합니다.큰 형태의 "Kill"입력 처리

우리 도서관 소프트웨어는 매주 전자 메일 보고서를 작성하여 지난 주 컬렉션에 추가 된 모든 새 도서를 생성합니다. 우리가 C & P이 데이터를 넣을 수있는 양식을 만들었고 (PHP/html을 사용하여) 새로운 제목을 보여주는 멋진 작은 페이지로 변환 할 것입니다. 양식이 제출되면 데이터가 MySQL 데이터베이스에 추가되기 전에 해당 데이터가 삭제됩니다. 양식의 데이터를 전달하고 처리하기 전에 "Kill"트리거가 발생합니다. 데이터는 형식으로 제공 : 내가 삽입하고 때

Kill shot : an American assassin thriller/Vince Flynn|Flynn, Vince|2012|9781416595205 (hbk.)|NEWBKSHELF|20120207| 

내가의 모든 인스턴스를 변경 자바 스크립트의 약간 무해한 뭔가을 죽이고 다음을 다시 변경 될이 작업을 수행하는 방법을 생각 MySQL 데이터베이스에 저장합니다.

그러나 위와 같은 항목이 수백 개가있을 수 있습니다. 자바 스크립트에는별로 좋지 않습니다. 예를 들어 의 모든 인스턴스를 변경하는 등의 모든 인스턴스를 변경하는 방법을 잘 모르겠습니다. kxll.) kxll에 나는 데이터를 저장할 때 안전하게 kxll 등을 변경할 수 있습니다 상당히 확신합니다.

+0

을 언급 한 바와 같이, 그렇지 않으면 스크립트를 사용하여, 크롬과 기본적으로 파이어 폭스에서 작동하지만 것이이 작업을 수행하는 가장 좋은 방법은 그 미친 방화벽을 낮추기 위해. –

+0

나는 접근 할 수 없다.) : – aslum

+0

나는 해결책이 꽤 쉽다라고 생각한다 : 당신의 방화벽을 고쳐라. – tplaner

답변

1

폼의 onSubmit()에 연결 한 다음 모든 필드를 검사하고 kill이 포함 된 경우 제출 된 필드의 값을 바꿔야합니다. 가장이는

$(function() { 
    $("#formid").bind("submit", function(event) { 
     $('input') 
     .filter(function(){return $(this).val().indexOf("kill") !== false;}) 
     .each(function(index,element) { 
      $(this).val($(this).val().replace(/kill/i, "kxll")); 
     }); 
    }); 
}); 

데모 여기 예를 들어, JQuery와 함께 이루어집니다 : http://jsfiddle.net/49psu/4/

당신은 어느 곳에서나 입력에서 '죽'을 캐치하려면 $('input[value*="kill"]').replace(/kill/ig, "kxll")을 사용할 수 있습니다. 더 많은 정보를 들어

:

http://api.jquery.com/each/

http://api.jquery.com/bind/

http://api.jquery.com/submit/

http://w3schools.com/jsref/jsref_replace.asp (자바 스크립트 대체)

+0

대소 문자를 구분해야합니다. jQuery 컨텐트 선택자가 대/소문자를 구분하지만 바꿉니다. .replace (/ kill/ig, "kxll")를 사용해야합니다. –

+0

나는 당신의 솔루션을 좋아하지만, 그가 많은 단어를 가지고 있다면 prob가 있습니다. 당신은 변경 사항을 저장하지 않고 지저분해질 수 있습니다. tho 만 죽이면 잘 작동합니다. –

+0

@RyanP 좋은 캐치, 업데이트되었습니다! –

1

비슷한 문제를 가지고 내 수정 ... 정통이지만, 않았다.

yourField.replace (/ kill/ig, '(ILLEGALTAG # 1)'); 그는 단지 onsubmit

에 기능을 넣어, 양식을 제출하고 당신이 당신의 불법 태그를 포함하여 SQL을하기 전에

당신은 제대로 표시하려면.

그렇게

ID | Word 
1  | Kill 

당신이 당신의 데이터를 내보낼 DB

단지 선두로부터 라이브 교체합니다.

참고 :이 솔루션은 적합하지 않습니다, kill이 아닌 유일한 특별한 단어 있는지 알 수 없기 때문에 당신이 rlly

+0

데이터가 PHP 서버에 절대 도달하지 않기 때문에 JS를 사용하여 브라우저에서 문제를 해결해야합니다. –

+0

oops misread, js 버전 대체 변경. –

0

제출시 양식에서 JSON 개체를 만든 다음 원본 양식 제출을 취소하는 동안 BASE64로 인코딩하고 AJAX를 통해 제출할 수 있습니다. 서버에서 Base64로 디코딩은 기본적으로 클라이언트 측에 http://php.net/manual/en/function.base64-decode.php

Base64로보기

base64_decode($string); 

을 통해 PHP에서 지원되는 추가 정보를 원하시면 https://developer.mozilla.org/En/DOM/Window.btoa를 참조

btoa(string) 

통해 작동된다. 만 어쩌면 당신은 액세스 권한이없는 여기

How can you encode a string to Base64 in JavaScript?

+0

조금 더 세게 대역폭 :( – jglouie