一個 e-mail 的內容有 mail body 跟 header
header 有 from: to: (真實的寄件與收信都)
body 裡頭也可以把 from: to: 的欄位填入 data 裡 (信件裡頭顯示的寄件與收信者)
如果我們從 mail-client 那邊修改 body 裡的 from: to: 就可以偽造信件的寄件與收信者...
問題來了"為甚麼SMTP設計的一開始要在body裡頭允許用 from: to: 欄位" ?!
@star03629: 如果mail client不允body裡頭可以用 from: to: 的話, 就不會有偽造信件的發生, 但... 好像現在mail client預設都是允許 from: to: 欄位的動作...
SMTP開頭就已經很明白的說明 , 它是一個**簡單**的郵件傳遞協定
SMTP = Simple Mail Transfer Portocol
你可能認為這會造成偽信 , 但這並不是設定 SMTP 的重點!!
SMTP的主要功能就是要當**郵局** , 跟現實生活的郵局一樣 , 有心人硬是要亂寄偽信 , 郵局還是會負責傳遞 , 道理就是這麼簡單!!
真的要確認寄件身份 , 靠的機制並不是 SMTP , 而是要透過 CA , SMTP + CA 可以整合的很好 , 這才是好方法!!
你當然可以不同意 Email 只要傳遞就好 , 那就請自行設計個 email portocol 吧 , 重點是 Simple is king in the internet world . 搞的太複雜 , 鎖東鎖西的 , 功能再怎麼強 , 都不會成為 internet portocol .
star03629提到:
為甚麼SMTP設計的一開始要在body裡頭允許用 from: to: 欄位"
因為從: DATA 指令以後, QUIT 指令以前的內容, SMTP 是不會去過濾的, 所以裡面寫了甚麼阿貓阿狗的, SMTP 在傳送期間都不會去管. 這裡根本沒有甚麼欄位, Mail Server 也不會把這些 To: From: 解讀成欄位, 他只是 Byte-by-Byte 忠實的傳送而已.
Body 裡面的 To 和 From 只對 Mail Client 有意義; 事實上, 如果 Mail Client 不想去解讀這些資料的話, 也是不會有意義的.
所以, 不應該質疑 SMTP 為何允許這些欄位出現? (因為這段文字不是 SMTP 的責任) 而是應該去問 Mail Client, 幹嘛要多事去解讀這些東西?....
body 包含 From:/To: 是屬於編碼, 與 SMTP protocol 無關
在 body 內有 plaint text/MIME/Base64 等幾種內文
編碼由 MUA 寄出前就決定好
若收信人的MUA 設 sent as inline
reply 時便可直接在 message content 改 body 將 From:/To: 改掉
適合逐段回信或邊看內文邊回信
若收信人的MUA 設 sent as attachment 把信件當附件寄出
適合 EDI 或不允許內文被改寫(如圖稿)
reply 時無法直接改 From:/To
對方收到信, 可完整看到原信, 且 vies message source 可看 header info 查到 delivery path 與 SMTP id , 再找出 mail log 找出該 smtp id 的 IP
與 sender email address
另一種是, 不管是 sent as inline 或 sent as attachment
也可將信件 save as .eml 或 .msg 然後開啟它 copy 至 draft
將 Sender/Recpitent email address 動手腳再 save as 然後當附件寄出
還有簡易程式也可以在 body 填上假的 From:/To:
body 隨你要放什麼