2012-09-07 3 views
2

나는이 양식을 통해 사용자가 나에게 이메일을 보냈습니다. SQL이 포함 된 경우 보안 문제 만 표시하면 나는 ...이 확보되어 있는지 알고하지 않거나이 양식은 안전한가요?

HTML :

<form id="form4" action="send_mic.php" name="form4" method="post" > 

      <textarea name="message4" cols="4" rows="4" id="message4" ></textarea><br /> 

      <input type="text" id="name4" name="name4" value="" /><br /> 

      <input type="text" id="email4" name="email4" value="" /><br /> 

      <input type="submit" value="" id="submit" /> 

</form> 

JQuery와 :

<script type="text/javascript"> 
$(document).ready(function() { 
    $('#form4').ajaxForm({ 
     beforeSubmit: validate 
    }); 

    function validate(formData, jqForm, options) { 
     var name = $('input[name=name4]').fieldValue(); 
     var email = $('input[name=email4]').fieldValue(); 
     var message = $('textarea[name=message4]').fieldValue(); 

     if (!name[0]) { 
      alert('Please enter a value for name'); 
      return false; 
     } 
     if (!email[0]) { 
      alert('Please enter a value for email'); 
      return false; 
     } 
     if (!message[0]) { 
      alert('Please enter a value for message'); 
      return false; 
     } 

     else { 

     $("#content").fadeOut(1000, function() { 
      $(this).html("<img src='images/postauto3.png'/>").fadeIn(2000); 
     }); 

     var message = $('textarea[name=message4]').val(''); 
     var name = $('input[name=name4]').val(''); 
     var email = $('input[name=email4]').val(''); 

      } 
    } 

}); 



    </script> 

PHP :

<?php 
     if($_POST){ 
       $email = $_POST['email4']; 
       $name = $_POST ['name4']; 
       $message = $_POST ['message4']; 
       // response hash 
       $ajaxresponse = array('type'=>'', 'message4'=>''); 

       try { 
         // do some sort of data validations, very simple example below 
         $all_fields = array('name4', 'email4', 'message4'); 

         foreach($all_fields as $field){ 
           if(empty($_POST[$field])){ 
             throw new Exception('Required field "'.ucfirst($field).'" missing input.'); 
           } 
         } 

         // ok, if field validations are ok 
         // now Send Email, ect. 

         // let's assume everything is ok, setup successful response 
         $subject = "New Contact"; 
         //get todays date 
         $todayis = date("l, F j, Y, g:i a") ; 

         $message = " $todayis \n 
         Attention: \n\n 
         Please see the message below: \n\n 
         Email Address: $email \n\n 
         Message: $message \n\n 

         "; 

         $from = "From: $email\r\n"; 


         //put your email address here 
         mail("[email protected]", $subject, $message, $from); 

         //prep json response 
         $ajaxresponse['type'] = 'success'; 
         $ajaxresponse['message'] = 'Thank You! Will be in touch soon'; 
       } catch(Exception $e){ 
         $ajaxresponse['type'] = 'error'; 
         $ajaxresponse['message'] = $e->getMessage(); 
       } 
       // now we are ready to turn this hash into JSON 
       print json_encode($ajaxresponse); 
       exit; 
     } 
?> 

양식을 사용하여 이메일을 보낼 때 보안 문제가 있습니까? 이거 괜찮아? 감사합니다.

+1

(그리고 위생 처리), 보낸 전자 메일이 휴지통이 아닌지 확인하십시오. 그러나 최악의 경우이 연락처에 대답 할 수 없습니다. – Touki

+1

어딘가에 누군가가 cc 및 bcc를 주입하지 않도록 일부 수표를 추가하는 방법에 대해 읽었습니다. 필드를 메일 헤더에 추가하십시오. 그들이 그렇게한다면, 그들은 웹 양식을 통해 원하는 누구에게나 이메일을 보낼 수 있습니다. – Ren

답변

3
  1. 스팸을 방지하기 위해 보안 문자를 추가 할 수 있습니다.당신은 사용하여 전자 메일 주사에 대하여 보호 할 수
  2. 이 보장합니다

    filter_var ($ 이메일, FILTER_VALIDATE_EMAIL를)

+0

이 코드 줄을 정확히 어디에 추가해야합니까? $ all_fields = array ('name4', 'email4', 'message4'); 괜찮 니? –

+0

모든 필드가 완벽하게 좋을 것입니다. 실제로 유효성 검사를 시도하기 전에 전자 메일 POST 필드를 수신하고 있는지 확인하기를 권합니다. –

+0

그러면 다른 사용자에게 스팸을 보내는 것에 대해 나를 보호 할 수 있습니까? 여기 사람들이 말하는 것처럼 .. –

0

서버 측에서 아무 것도 수정하지 않으므로 여기에 보안 문제가 표시되지 않습니다. 스팸 문제 일 수도 있습니다. 그것에 보안 문자를 추가하십시오. 나머지는 괜찮아 보인다.

+2

및 이메일 주입은 어떻게됩니까? – haynar

1

이 양식이 안전하다고 생각합니다. 아무도이 양식을 통해 웹 사이트를 만들 수 없다는 것을 의미합니다.
그러나 더 좋은 결과를 얻으려면 다음을 추가해야합니다. 1. PHP 서버 측에서 게시 변수를 확인해야합니다. 즉, 이메일/이름/메시지가 유효하지 않은지 확인해야합니다.
2. 추가해야합니다. 스팸 방지를위한 보안 문자

6

일반적으로 엄지 손가락 규칙은 항상 다음과 같아야합니다. 사용자가 제공 한 데이터를 신뢰하지 마십시오. 그리고 아니요, 귀하의 코드는 총알이 아닙니다. 사용자 입력을 확인하거나 위생적으로 처리하지 않으며 동시에 mail()을 사용하기 때문에 취약합니다. 사용자는 email4 filed에 대해 제작 된 값으로 쉽게 피드 할 수 있습니다. 양식 데이터를 직접 사용하기 때문에 email4를 사용하여 보내는 메일에 추가 메일 헤더를 삽입 할 수 있습니다. 이 헤더는 BCC: 또는 CC:이거나 심지어 TO: 일 것입니다. 그러면 스팸 중계 역할을합니다. 예를 들어 나는 등이

[email protected] 
CC: [email protected], [email protected], [email protected], 
X-Spam-Owned: Whoa 

를 게시 할 경우 email4 다음 헤더는 다음과 같이보고 끝날 것 :

To: [email protected] 
CC: [email protected], [email protected], [email protected], 
X-Spam-Owned: Whoa 

는 여러 데이터 당신에게있는 CRLF로 간단하게 풀 텍스트를 게시 할 수 있습니다.

이와 같은 보안 허점을 피하려면 mail()을 삭제하고 이와 비슷한 것을 처리하는 더 영리한 것을 사용해야합니다 (mail()은 좋지 않습니다. 그러나 당신은 당신이하고있는 것을 다소 낮게 알고 있어야합니다.) 높은 수준의 기능보다). PHPMailer 또는 유사한 패키지를 사용하는 것이 좋습니다. 항상 사용자가 제공 한 데이터를 검증해야합니다 (특히 피사체와 같은 단일 행 필드가 실제로는 단일 행을 제거하는 CRLF로 충분해야합니다). 자동 양식 제출이 가능한 상태에서 보안 문자를 추가하십시오.

1

당신은 또한

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { 
    /* special ajax here */ 
    die($content); 
} 

와 서버 측 코드를 포장 할 수 있습니다 ajax 요청이 서버에 전달됩니다.

그리고 귀하의 질문에 jQuery 선택기 중 하나에서 사용중인 ID를 기억하십시오.

+0

그것을 감싸는 아이디어에 감사드립니다! 나는 그 ID를 잊어 버렸다. :) –

1

데이터베이스로 작업하지 않더라도 전자 메일을 보내는 데 보안 문제가있을 수 있습니다. 물론이 양식에 의해 해킹 할 수 없지만 이메일 필드에이 같은 사용자의 의지 입력 뭔가를 할 때 문제가 발생 시킬수됩니다

[email protected] // there is a new line here 
CC:[email protected],[email protected],[email protected] 

그래서 당신이 할 수있는 최선의 메일에 대한 모든 입력 필드를 살균입니다 기능을 사용하여 그러한 스팸 배달을 방지합니다. 그리고 @ WebnetMobile.com 이미 슬픈, 결코 신뢰 사용자 입력을 가지고로

0

당신은 형태로 보안 문자, 클라이언트 측 및 서버 측 유효성 검사를 추가해야

당신은 이메일 전송을 확인하는`filter_var` 기능을 사용하는 것이 좋습니다