2011-07-06 24 views
7

Tôi có biểu mẫu liên hệ HTML được điều khiển bằng PHP trên trang web của mình. Hiện tại tôi sử dụng hàm PHP mail(). Do đó, tôi phải thực hiện nhiều xác thực nhập của người dùng để tránh email header injection attacks. Tôi nghĩ rằng tôi là an toàn, nhưng tôi có thể quên một cái gì đó và tôi muốn di chuyển đến một thư viện email PHP rắn. Thư viện tôi đã chọn là Swiftmailer.Biểu mẫu liên hệ HTML định hướng PHP có an toàn bằng Swiftmailer có an toàn không?

Bây giờ tôi muốn kiểm tra xem Swiftmailer giải quyết như sau:

  1. Loại bỏ hoặc thoát <> ký tự trong tên người gửi.
  2. Xóa các dòng mới (\n, \r\n ...) từ tên người gửi.
  3. Xóa hoặc thoát khỏi dòng mới khỏi chủ đề email.
  4. Bình thường hóa dòng mới trong nội dung thư (nội dung của email). Theo tài liệu PHP, \n nên được sử dụng trong nội dung và \r\n làm dấu phân tách tiêu đề email.

PS: Tôi đã cố gắng liên hệ với nhóm Swiftmailer với các câu hỏi của mình mà không thành công nên tôi đang cố gắng tại đây.

Edit:

tôi đã làm một số trường hợp thử nghiệm với Swiftmailer và đây là những gì tôi tìm thấy cho đến nay:

  1. Khi bạn có một < hoặc > trong tên của một người gửi, bạn sẽ có được a Không thể gửi được thư lỗi email. Điều này một phần có thể dẫn đến một máy chủ thư của bạn (có thể tôi sai) trong DOS attack. Điều này có bình thường không ?!
  2. Các dòng mới được thoát để tấn công tiêm không thành công.
  3. Các dòng mới được thoát để tấn công tiêm không thành công.
  4. Đã kiểm tra nhưng tôi không thể xem Swiftmailer làm gì (nếu có điều gì đó). Vì vậy, tôi vẫn còn trong bóng tối ở đây.

Ai đó có thể làm rõ # 1 và # 4 cho tôi không? Tôi không chắc đó có phải là hành vi bình thường hay không ...

+6

Bạn luôn có thể xem xét thông qua các mã ...Swiftmailer chỉ là một kịch bản PHP, sau khi tất cả. Nếu bạn hoang tưởng về các lỗ hổng, bạn có thể muốn kiểm tra bất kỳ thư viện bên ngoài nào. –

+2

'Bảo vệ khỏi tấn công tiêu đề mà không tước nội dung dữ liệu yêu cầu' (từ trang chủ) và từ quét thô thông qua mã tôi giả định rằng nếu bạn chuyển bất kỳ thứ gì không hợp lệ, bạn sẽ nhận được ngoại lệ thay vì chấp nhận im lặng . – hakre

+1

Dường như bạn có dải \ n và \ r từ bất kỳ tiêu đề nào được người dùng gửi và wordwrap ($ message, 70), bạn sẽ không sao. thỏa thuận với việc tước < and > từ tên người gửi là gì? Tôi sẽ rất quan tâm để biết loại hack các ký tự này để bạn mở. Bất kỳ thông tin được đánh giá rất cao. – dqhendricks

Trả lời

1

EDIT: Câu trả lời này có thể lỗi thời. Vào thời điểm tôi viết bài này, đã có một số vấn đề với thư viện SwiftMailer. Tại thời điểm này, mọi thứ đều hoạt động tốt với SwiftMailer và được coi là thư viện tốt hơn với nhiều thứ hơn để cung cấp hơn PHPMailer.

Tôi khuyên bạn nên sử dụng phpmailer. Nó là một trong những thư viện ổn định nhất mà tôi từng sử dụng. Dưới đây là một mã ví dụ sẽ hoạt động:

include("./phpmailer/class.phpmailer.php"); 
$mail = new PHPMailer(false); // the true param means it will throw exceptions on errors, which we need to catch 
$mail->IsSMTP(); 
$mail->Host = "YourDomainName.com"; 
$mail->SMTPDebug = 2; 
$mail->SMTPAuth = true; 
$mail->SMTPSecure = "tls"; 
$mail->Host = "YourSMTPMailServer.com"; 
$mail->Port = 587; 
$mail->Username = "[email protected]"; 
$mail->Password = "password"; // GMAIL password 
$mail->AddAddress("[email protected]", '<< >> ! " Receiver Name'); 
$mail->SetFrom('[email protected]', '<< >> ! " Sender Name'); 
$mail->Subject = "A testing subject"; 
$mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; 
$mail->MsgHTML('This is my <b>html</b> testing email, sent '.time()); 
$mail->Send(); 

Bạn sẽ cần phải định cấu hình mã này để nó kết nối với máy chủ email của bạn nhưng nó sẽ hoạt động. Phpmailer trốn thoát cho đến nay tất cả mọi thứ tôi đã cố gắng. Tôi chỉ kiểm tra là "[email protected]". Tôi làm điều đó với mã này:

$email = "[email protected]"; 
$email = filter_var(filter_var($email,FILTER_SANITIZE_EMAIL),FILTER_VALIDATE_EMAIL); 

if($email){ 
    echo "This email is valid!"; 
} else { 
    echo "This email is INVALID!"; 
} 

Tôi hy vọng điều này sẽ giúp :)

+2

Vâng tôi biết PHPMailer rất tốt khi tôi sử dụng nó một vài năm. Tôi chỉ không thích cách làm việc này. Các tài liệu/hướng dẫn cũng đã lỗi thời trên trang web rất riêng của họ! Tôi thích Swiftmailer hơn vì nó được Fabien Potencier/symphony hỗ trợ. – AlexV

+0

@AlexV Tôi đang sử dụng SwiftMailer mọi lúc - cho đến nay không có vấn đề gì cả, mặc dù tôi đã xác thực tên người dùng/email trước và các ký tự '<>' này sẽ bị xóa trong thời gian dài trước khi nó đến được bưu phẩm. – LazyOne