ปัญหาด้านความปลอดภัยนี้ควรเกิดจาก JavaScript โดยทั่วไป เซิร์ฟเวอร์ A ถูกตั้งค่าให้ไม่อนุญาตให้เครื่อง B ในโดเมนอื่นดำเนินการ ajax บน B เพื่อเรียกทรัพยากรบนเซิร์ฟเวอร์ A ต่อไปนี้คือตัวอย่างง่ายๆ ของความเสี่ยงด้านความปลอดภัย:
สมมติว่าสามารถเข้าถึงได้จากโดเมน ฉันสามารถเขียน ajax บนเครื่องของฉันเองเพื่อขอทรัพยากรในเว็บแอปพลิเคชันต่างๆ ของ Google ได้ ตัวอย่างเช่น อันดับแรกฉันใช้ Firefox เพื่อศึกษาที่อยู่และพารามิเตอร์ของคำขอ Ajax จำนวนมากโดย GMail ระหว่าง กระบวนการเข้าสู่ระบบและฉันจะได้รับกระบวนการตรวจสอบคุกกี้ของผู้ใช้ จากนั้นเขียน js เพื่อรับคุกกี้ของผู้ใช้รายอื่นข้ามโดเมน เพื่อให้คุณสามารถข้ามรหัสผ่าน GMail ของผู้ใช้และเข้าสู่ระบบกล่องจดหมาย GMail ของผู้อื่นได้
ด้วยข้อจำกัดของ ajax เป็นไปไม่ได้จริงหรือที่จะทำ ajax เพื่อทำลายการเข้าถึงโดเมน?
เป็นเรื่องจริงที่ ajax ไม่สามารถทำลายโดเมนได้ แต่เราสามารถใช้งานได้ผ่านการถ่ายทอด หลักการที่เรียกว่าพร็อกซีนั้นง่ายมาก คุณสามารถตั้งค่าคอนเทนเนอร์ของคุณเองระหว่าง js ของคุณเองและทรัพยากรของเซิร์ฟเวอร์ระยะไกล A คุณสามารถใช้งานได้ asp, php, java, .net ฯลฯ ภาษาเว็บไดนามิกที่เป็นไปได้คือ asp เป็นตัวอย่าง (รับรายชื่อเพื่อนของผู้ใช้บนเว็บไซต์ Redekuai และส่งคืนรูปแบบข้อมูล xml)
<%
p = " http://redekuai.com/api/user_friends_xml/funy "
การตอบสนอง BinaryWrite ZQcnGet (p)
การตอบสนองฟลัช
ฟังก์ชัน ZQcnGet(url)
ตั้งค่าการเรียกข้อมูล = CreateObject("Microsoft.XMLHTTP")
ด้วยการเรียกค้น
. เปิด "รับ", url, เท็จ, "", ""
.ส่ง
ZQcnGet = .ResponseBody
จบด้วย
ตั้งค่าการดึงข้อมูล = ไม่มีเลย
ฟังก์ชันสิ้นสุด
-
บันทึกโค้ดนี้เป็น proxy.asp แล้วนำไปไว้ใน IIS ในขณะนี้ คุณสามารถค้นหาเครื่องที่จะเขียน js และใช้ ajax เพื่อขอ proxy.asp ได้ ในท้ายที่สุด ก็เทียบเท่ากับการเข้าถึงโดเมน ajax .
โค้ดตัวอย่าง PHP นั้นง่ายกว่า
echo file_get_contents(" http://redekuai.com/api/user_friends_xml/funy "");
-
หมายเหตุ: เวอร์ชัน php ต้องเป็น >= 4.3.0
นี่คือโค้ดตัวอย่างสำหรับเวอร์ชัน asp.net (C#):
การใช้ System.Net;
ใช้ System.IO;
ใช้ System.Text;
ajaxpages คลาสสาธารณะบางส่วน: System.Web.UI.Page
-
โมฆะที่ได้รับการป้องกัน Page_Load (ผู้ส่งวัตถุ EventArgs e)
-
WebRequest wr = WebRequest.Create(" http://redekuai.com/api/user_friends_xml/funy ");
WebResponse wres = wr.GetResponse ();
การเข้ารหัส resEncoding = System.Text.Encoding.GetEncoding("utf-8");
StreamReader sr = StreamReader ใหม่ (wres.GetResponseStream (), resEncoding);
สตริง html = sr.ReadToEnd();
การตอบกลับเขียน(html);
sr.ปิด();
wres.ปิด();
-
-
ตามลำดับ proxy.asp proxy.php proxy.aspx
แล้วความสำคัญเชิงปฏิบัติของการทำงานที่ดีในฐานะพร็อกซีและการเปิดใช้งานโดเมน js เข้าถึงทรัพยากรเว็บไซต์ระยะไกลบนเครื่องทั่วไปของคุณเอง (ไม่ใช่เว็บเซิร์ฟเวอร์) คืออะไร?
คุณรู้ไหมว่าเทคโนโลยีอินเทอร์เน็ตในปัจจุบันได้เข้าสู่ยุค Mashup แล้ว มีบริษัทมากกว่า 2,000 แห่งในสหรัฐอเมริกาที่ต้องพึ่งพา Facebook APP เพื่อความอยู่รอด จริงหรือที่ห่วงโซ่อุตสาหกรรมต่างประเทศประเภทนี้ไม่สามารถพัฒนาได้ในจีน คุณต้องรู้ว่าอินเทอร์เน็ตจะกลายเป็นโครงสร้างพื้นฐานของจีนในอีก 5 ปีข้างหน้า มีไซต์ web2.0 ที่ค่อนข้างดีอยู่แล้วที่กำลังเปิด API (ยิงอีกแล้วเริ่มร้อนแรง) หรือกำลังเตรียมที่จะเปิด