คุณไม่มีการรักษาความปลอดภัยที่ดีกว่าเนื่องจากตัวแปรถูกส่งผ่าน HTTP POST มากกว่าที่คุณมีกับตัวแปรที่ส่งผ่าน HTTP GET
HTTP / 1.1 ให้วิธีการมากมายแก่เราในการส่งคำขอ :
- ตัวเลือก
- GET
- ศีรษะ
- โพสต์
- PUT
- ลบ
- ติดตาม
- CONNECT
สมมติว่าคุณมีเอกสาร HTML ต่อไปนี้โดยใช้ GET:
<html>
<body>
<form action="http://example.com" method="get">
User: <input type="text" name="username" /><br/>
Password: <input type="password" name="password" /><br/>
<input type="hidden" name="extra" value="lolcatz" />
<input type="submit"/>
</form>
</body>
</html>
เบราว์เซอร์ของคุณถามอะไร มันถามสิ่งนี้:
GET /?username=swordfish&password=hunter2&extra=lolcatz HTTP/1.1
Host: example.com
Connection: keep-alive
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/ [...truncated]
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) [...truncated]
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
ทีนี้ลองทำเป็นว่าเราเปลี่ยนวิธีการร้องขอนั้นเป็น POST:
POST / HTTP/1.1
Host: example.com
Connection: keep-alive
Content-Length: 49
Cache-Control: max-age=0
Origin: null
Content-Type: application/x-www-form-urlencoded
Accept: application/xml,application/xhtml+xml,text/ [...truncated]
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; [...truncated]
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
username=swordfish&password=hunter2&extra=lolcatz
ทั้งคำขอ HTTP เหล่านี้คือ:
- ไม่มีการเข้ารหัส
- รวมอยู่ในทั้งสองตัวอย่าง
- สามารถหลบหลีกและอยู่ภายใต้การโจมตีของ MITM
- ทำซ้ำได้อย่างง่ายดายโดยบุคคลที่สามและบอทสคริปต์
เบราว์เซอร์จำนวนมากไม่รองรับวิธี HTTP อื่น ๆ นอกเหนือจาก POST / GET
พฤติกรรมของเบราว์เซอร์จำนวนมากเก็บที่อยู่ของหน้า แต่นี่ไม่ได้หมายความว่าคุณสามารถเพิกเฉยต่อปัญหาอื่น ๆ ได้
ดังนั้นจะเฉพาะเจาะจง:
มีความปลอดภัยมากกว่าหรือไม่? ฉันรู้ว่า POST ไม่เปิดเผยข้อมูลเกี่ยวกับ URL แต่มีคุณค่าที่แท้จริงในนั้นหรือเป็นเพียงความปลอดภัยผ่านความสับสน? การปฏิบัติที่ดีที่สุดที่นี่คืออะไร?
สิ่งนี้ถูกต้องเพราะซอฟต์แวร์ที่คุณใช้พูด HTTP นั้นมีแนวโน้มที่จะเก็บตัวแปรคำร้องขอด้วยวิธีหนึ่ง แต่ไม่ใช่อีกวิธีหนึ่งที่ป้องกันไม่ให้ใครบางคนดูประวัติเบราว์เซอร์ของคุณหรือการโจมตีไร้เดียงสาจากเด็กอายุ 10 ขวบ หรือสคริปต์ที่ตรวจสอบที่เก็บประวัติของคุณ หากคุณมีสคริปต์ที่สามารถตรวจสอบที่เก็บประวัติของคุณคุณสามารถมีสคริปต์ที่ตรวจสอบปริมาณการใช้งานเครือข่ายของคุณได้อย่างง่ายดายดังนั้นการรักษาความปลอดภัยทั้งหมดนี้ผ่านความสับสนจะให้ความสับสนกับสคริปต์ kiddies และแฟนอิจฉา
มีการเข้ารหัสข้อมูล POST ผ่าน https แต่ URL อาจถูกดมกลิ่นโดยบุคคลที่สามหรือไม่
นี่คือวิธีการทำงานของ SSL จำคำขอทั้งสองที่ฉันส่งไปด้านบนได้ไหม นี่คือลักษณะที่ปรากฏใน SSL: (ฉันเปลี่ยนหน้าเป็นhttps://encrypted.google.com/เนื่องจาก example.com ไม่ตอบสนองกับ SSL)
POST ผ่าน SSL
q5XQP%RWCd2u#o/T9oiOyR2_YO?yo/3#tR_G7 2_RO8w?FoaObi)
oXpB_y?oO4q?`2o?O4G5D12Aovo?C@?/P/oOEQC5v?vai /%0Odo
QVw#6eoGXBF_o?/u0_F!_1a0A?Q b%TFyS@Or1SR/O/o/_@5o&_o
9q1/?q$7yOAXOD5sc$H`BECo1w/`4?)f!%geOOF/!/#Of_f&AEI#
yvv/wu_b5?/o d9O?VOVOFHwRO/pO/OSv_/8/9o6b0FGOH61O?ti
/i7b?!_o8u%RS/Doai%/Be/d4$0sv_%YD2_/EOAO/C?vv/%X!T?R
_o_2yoBP)orw7H_yQsXOhoVUo49itare#cA?/c)I7R?YCsg ??c'
(_!(0u)o4eIis/S8Oo8_BDueC?1uUO%ooOI_o8WaoO/ x?B?oO@&
Pw?os9Od!c?/$3bWWeIrd_?( `P_C?7_g5O(ob(go?&/ooRxR'u/
T/yO3dS&??hIOB/?/OI?$oH2_?c_?OsD//0/_s%r
รับผ่าน SSL
rV/O8ow1pc`?058/8OS_Qy/$7oSsU'qoo#vCbOO`vt?yFo_?EYif)
43`I/WOP_8oH0%3OqP_h/cBO&24?'?o_4`scooPSOVWYSV?H?pV!i
?78cU!_b5h'/b2coWD?/43Tu?153pI/9?R8!_Od"(//O_a#t8x?__
bb3D?05Dh/PrS6_/&5p@V f $)/xvxfgO'q@y&e&S0rB3D/Y_/fO?
_'woRbOV?_!yxSOdwo1G1?8d_p?4fo81VS3sAOvO/Db/br)f4fOxt
_Qs3EO/?2O/TOo_8p82FOt/hO?X_P3o"OVQO_?Ww_dr"'DxHwo//P
oEfGtt/_o)5RgoGqui&AXEq/oXv&//?%/6_?/x_OTgOEE%v (u(?/
t7DX1O8oD?fVObiooi'8)so?o??`o"FyVOByY_ Supo? /'i?Oi"4
tr'9/o_7too7q?c2Pv
(หมายเหตุ: ฉันแปลง HEX เป็น ASCII บางส่วนไม่ควรแสดงให้เห็นได้ชัด)
การสนทนา HTTP ทั้งหมดถูกเข้ารหัสส่วนการสื่อสารที่มองเห็นได้เท่านั้นอยู่ในเลเยอร์ TCP / IP (หมายถึงที่อยู่ IP และข้อมูลพอร์ตการเชื่อมต่อ)
ขอผมสร้างประโยคที่ยิ่งใหญ่ที่นี่ เว็บไซต์ของคุณไม่ได้รับการรักษาความปลอดภัยที่ดีกว่าหนึ่งวิธี HTTP มากกว่าวิธีอื่นแฮ็กเกอร์และ newbs ทั่วโลกรู้วิธีการทำสิ่งที่ฉันเพิ่งแสดงที่นี่ หากคุณต้องการความปลอดภัยให้ใช้ SSL เบราว์เซอร์มักจะเก็บประวัติขอแนะนำโดย RFC2616 9.1.1 ว่าอย่าใช้ GET เพื่อดำเนินการ แต่คิดว่า POST มีความปลอดภัยผิดปกติ
สิ่งเดียวที่ POST คือมาตรการรักษาความปลอดภัยมีต่อ? ป้องกันอดีตที่หึงของคุณพลิกผ่านประวัติเบราว์เซอร์ของคุณ แค่นั้นแหละ. ส่วนที่เหลือของโลกถูกบันทึกไว้ในบัญชีของคุณหัวเราะเยาะคุณ
เพื่อแสดงให้เห็นถึงสาเหตุที่ POST ไม่ปลอดภัย Facebook ใช้คำขอ POST ทั่วสถานที่ดังนั้นซอฟต์แวร์เช่นFireSheep จึงมีอยู่ได้อย่างไร
โปรดทราบว่าคุณอาจถูกโจมตีด้วยCSRFแม้ว่าคุณจะใช้ HTTPS และเว็บไซต์ของคุณไม่มีช่องโหว่XSS ในระยะสั้นสถานการณ์การโจมตีนี้ถือว่าผู้ที่ตกเป็นเหยื่อ (ผู้ใช้เว็บไซต์หรือบริการของคุณ) ได้เข้าสู่ระบบแล้วและมีคุกกี้ที่เหมาะสมจากนั้นเบราว์เซอร์ของผู้เสียหายจะถูกขอให้ทำบางสิ่งบางอย่างกับเว็บไซต์ของคุณ หากคุณไม่ได้รับการปกป้องจาก CSRF ผู้โจมตียังสามารถดำเนินการกับข้อมูลประจำตัวของผู้ที่ตกเป็นเหยื่อ ผู้โจมตีไม่สามารถมองเห็นการตอบสนองของเซิร์ฟเวอร์เพราะมันจะถูกโอนไปยังเบราว์เซอร์ของเหยื่อ แต่ความเสียหายมักจะทำที่จุดนั้น