2012-05-22 4 views
2

가 현재 나는이 전략을 사용하여 전송 된 HTML 양식 또는 데이터를 제출 한 후

를 jQuery의 $.get() 또는 I 와서 알고 다음에 논리를 적용 할 필요가 $.post() 그것의 기초.

가정 해 보겠습니다. $_POST['username'],$_POST['password']$_POST['login_submit_button']이 있습니다.

if(isset($_POST['login_submit_button']) && isset($_POST['username']) && $_POST['username'] != "" && isset($_POST['password']) && $_POST['password'] != "") { 
    // calling a common function safe_vars() which does 
    // mysql_real_escape_string(stripslashes(trim($any_variable_need_to_become_safe))) 
    // and now using the above variables for different purposes like 
    // calculation, insertion/updating old values in database etc. 
} 

내가이 모든 논리가 틀리거나 심각한 문제가 알고, 그래서 대신의-훨씬 안전하고 완벽한 솔루션을 원하는 : 내 처리 스크립트 파일에서 , 나는이 좋아해요. 내 전략에서 취약점과 심각한 보안 표백제를 찾아내는 것을 환영합니다. 이 질문은 다른 사람들에게도 도움이 될 수 있습니다. 답이 더 명확 해지면 유익한 커뮤니티 위키가 될 수 있습니다.

+0

이 나 strlen'에 대한 확인 사용 ($ _ POST는 [ '사용자 이름'])은 값이 존재하는지 여부를 확인하지 않기 때문에>는 0' 더 효율적입니다 또는 더 이상. – Pieter888

+0

또는'&& (! _ empty [$ _ POST [ 'username'])) && ...' – Neograph734

+0

! empty ($ _ POST [ 'username'])와 동일합니다. $ _POST [ 'username']이 설정되어 있지 않으면 (emtpy와 strln 함수 둘 다에 대해 알려줍니다.하지만 프로젝트가 온라인 상태 일 때 통지 오류를 표시하지 않을 것입니다) – Mohammer

답변

3

제네릭 수퍼 세이프티를 안전하게 만들 수있는 방법이 없습니다.

mysql_real_escape_string

당신은 모든이를 사용할 수 없습니다. 그것은 이전의 mysql API를 사용하고 SQL을 만들기 위해 수동으로 문자열을 스매싱한다고 가정합니다. 그러지 마. 준비된 쿼리와 바운드 인수를 처리하는 함수 인 PDO 또는 mysqli를 사용하십시오.

stripslashes

이 마법 따옴표에 대한 해독제이다. 마법 따옴표가 켜져 있지 않으면 데이터가 삭제됩니다. 사용하지 마십시오. 마법의 따옴표를 끄십시오.

trim

이 데이터를 파괴합니다. 문자열의 시작과 끝에서 공백을 제거하지 않으려면 사용하지 마십시오. 타겟 언어 즉시 해당 언어로 데이터를 삽입하기 전에


탈출 데이터.

SQL의 경우 use bound arguments and prepared queries.

HTML의 경우 htmlspecialchars 또는 콧수염처럼 탈출하는 템플릿 언어를 사용하십시오.

또는 HTML을 허용하려면 구문 분석하고 DOM을 생성하고 허용 목록을 사용하여 필터링 한 다음 다시 HTML로 serialize하십시오.

JSON를 들어, encode_json

+0

+1 철저한 답. –

+0

@JasonMcCreary - 잘 잡습니다. 감사. – Quentin

+0

매우 가볍고 지능적으로 내가 알고 싶은 모든 것을 다뤘습니다! PDO 튜토리얼이 도움이 될 수있는 좋고 철저하게 설명 된 구식의 mysql_ * 함수 대신 PDO를 사용하고 싶습니다. 방법에 의해 당신의 대답에 감사드립니다. – Vishal

1
  • 당신은 단지 당신이 사용할 수의 magic_quotes를 (확인 get_magic_quotes_gpc 사용)이있는 경우 위해서 stripslashes 필요
  • 당신은 화이트리스트는 귀하의 게시물이 filter_var 또는 ctype_* 또는 preg_match을 (사용뿐만 아니라 길이와 구속 조건을 확인 바르 필터링해야하며, 존재)
  • 사용
  • htmlentities
어떤 HTML 출력을 탈출 탈출 적절한 보장하기 위해 쿼리 문/ PDO 준비

위의 내용은 SQL 주입/XSS를 피하기위한 좋은 방법입니다.

+0

흠, 기본적으로 magic_quotes가 해제되어 있지만 'stripslashes'를 사용하지 않았습니다. # 2 요점은 주목할만한 점입니다. POST vars를 필터링하기 위해 권장 사항을 자세히 공부하겠습니다. 고맙습니다. – Vishal