2013-06-14 1 views
9

사용자의 이름, 전자 메일 및 메시지를 수락하는 양식이 있습니다. 이름, 전자 메일 및 메시지의 유효성 검사를 수행하고 mail() 기능을 사용하여 보내면됩니다.사용자 입력 데이터를 이메일로 보내기 전에 위생 처리해야합니까?

데이터베이스에 $name, $email$message을 입력하는 경우 SQL 주입을 위해이 데이터를 이스케이프 처리합니다. 또는 웹 페이지에서 반향 출력하는 경우 htmlspecialchars()을 사용합니다.

이 데이터를 이메일로 보낼 때 어떻게해야합니까? 나는 SQL 주입에 대해 걱정할 필요가 없다는 것을 알고 있지만, XSS는 어떻습니까? 이 세 변수에도 htmlspecialchars()을 사용해야합니까?

나는 이런 식으로 메일을 보내

mail('[email protected]', 'Contact From: '. $name, "$message", 'From: '. $email); 

는 I 이메일 주입에 대해 읽었습니다,하지만 난 그것을 이해할 수 없습니다.

제게 알려주세요.

+0

을 중지해야합니다 그것이 단수가 아닌 여러 개의 주소를 확인하기 위해 이메일 주소를 확인해야합니다. 사용 입력을 기반으로 From 헤더를 설정하는 경우 yes로 지정하면 위생이 필요합니다. – andrewsi

+0

이것은 또한 내가 이해하지 못하는 것입니다! 나는 이것에 대한 답을보기를 고대한다. – pattyd

+0

mail ('[email protected] ','연락처 : '. $ name, "$ message",'보낸 사람 : '. $ email); – user2471133

답변

7

완전히 이스케이프는 데이터가 포함 된 컨텍스트에 따라 다릅니다.

HTML 메일을 보내시겠습니까? 그런 다음 HTML 컨텍스트가 있고 htmlspecialchars()을 사용해야합니다.

일반 텍스트 메일을 보내는 경우 일반 텍스트로 이스케이프가 없습니다.

유일한 위협은 메일 클라이언트가 일반 텍스트를 실행 가능한 것으로 해석 한 다음 일부 이상한 이름과 메일 주소를 얻을 때 작동한다는 일부 버그가있는 것입니다.

그러나 이는 실제 헤더가 아닌 메일 내용에만 적용됩니다.

사용자 지정 메일 헤더 From을 사용하고 있습니다. 이것을 사용하지 마십시오. From은 스팸 필터에 사용됩니다. 내 메일 주소를 입력하고이 메일을 From: [email protected]과 함께 보내면 내 이메일 서버가 가장 된 것입니다. 스팸은 실제 소스를 숨기고 불만 사항과 오류 피드백을 해당 메일 주소 뒤에있는 불행한 사람에게 리디렉션하기 위해이 기능을 사용했습니다. 오늘이 때문에 남용을 막을 메커니즘이 있습니다. 따라서 나는이 우편물을 보내는 척하지 마십시오.

답장 버튼을 클릭하여 나를 대답하고 싶다면 Reply-to 헤더를 사용하고 항상 From: [email protected]을 사용하십시오.

또한 이러한 사용자 지정 헤더는 잘못된 항목의 진입 점입니다. 메일 주소 만 추가하고 있는지 확인하십시오. 줄 바꿈 문자를 추가하지 마십시오. 이것들은 메일 서버가 새로운 헤더가오고 있다고 생각하게 만들 것이고 이것은 메일 헤더 삽입으로 이어질 것입니다.

+0

이메일을 보내는 곳을 제외하고 사용자가 모든 것을 입력하도록합니다. 따라서 사용자는 이름, 전자 메일 및 메시지 필드에 html 태그, 스크립트 태그 등을 입력 할 수 있습니다. – user2471133

0

문제는 간단합니다. 어떤 사용자가 누군가 다른 사람에게 전자 메일을 보낼 수 있다면 대부분의 전자 메일 클라이언트와 모든 웹 메일 인터페이스에서 HTML 또는 JavaScript를 사용하여 내용을 다시 작성할 수 있습니다. 다른 사이트를로드하는 iFrame을 삽입하거나 PopUp 스크립트를 삽입 할 수 있습니다.

브라우저에서 입력을 위생 처리하는 것이 가장 중요합니다.

+0

전자 메일 헤더에 해당 내용에 HTML이 포함되어있는 경우에만 HTML이 해석됩니다. 안녕하세요을 포함하는 일반 텍스트 메시지를 보내보십시오. – deceze

+0

그런 사용자의 이메일을 손상시키지 않을 것이라고 생각하십니까? htmlspecialchars()를 사용한다면? – user2471133

+0

일반 텍스트 메일을 사용하는 경우에도 공격자는 악의적 인 대상에 대한 링크를 삽입 할 수 있으며 모든 최신 클라이언트는 이러한 항목을 강조 표시합니다 ... 살균 및 필터링이 중요합니다! – FloydThreepwood

3

당신은 당신이 그것을 사용하는 방법에 따라 다르다 이메일 스팸

http://www.php.net/manual/en/filter.filters.validate.php

$email = "[email protected]"; 

if(!filter_var($email, FILTER_VALIDATE_EMAIL)) 
    { 
    echo "email not valid"; // do not send 
    } 
else 
    { 
    echo "email valid"; // send 
    } 
+0

그래서 $ name 및 $ message가 아닌 $ email 필드의 유효성을 검사하면됩니까? – user2471133

+0

@user2471133 이메일 var가 주요 부분이지만 이름과 메시지에서 @을 [at]로 변경할 수도 있습니다. $ message = str_replace ('[at]', '@', $ message); ' – amigura

+0

당신을위한 추가 정보 [link] ] http://www.securephpwiki.com/index.php/Email_Injection [링크] – amigura

관련 문제