يجب أن تُعزى مشكلة الأمان هذه إلى JavaScript بشكل عام، تم إعداد الخادم A بحيث لا يسمح للجهاز B في مجال آخر بتنفيذ ajax على B لاستدعاء الموارد على الخادم A. فيما يلي مثال بسيط للمخاطر الأمنية:
بافتراض أنه يمكن الوصول إلى ajax من مجال ما، يمكنني كتابة ajax على جهازي الخاص لطلب الموارد في تطبيقات الويب المختلفة من Google. على سبيل المثال، أستخدم Firefox أولاً لدراسة العناوين والمعلمات لعدد كبير من طلبات ajax بواسطة GMail. عملية تسجيل الدخول، ويمكنني الحصول على عملية التحقق من ملفات تعريف الارتباط للمستخدم، ثم اكتب js للحصول على ملفات تعريف الارتباط للمستخدمين الآخرين عبر المجالات، حتى تتمكن من تجاوز كلمة مرور GMail الخاصة بالمستخدم وتسجيل الدخول إلى صناديق بريد GMail الخاصة بالأشخاص الآخرين
باستخدام قيود ajax عبر النطاقات
.هل من المستحيل حقًا القيام بأياكس لكسر الوصول إلى المجال؟
صحيح أن ajax لا يمكنه كسر المجال، ولكن يمكننا تنفيذه من خلال الترحيل، ما يسمى بمبدأ الوكيل بسيط للغاية. يمكنك إعداد الحاوية الخاصة بك بين js الخاص بك وموارد الخادم البعيد A. يمكنك استخدامها asp، php، java، .net، وما إلى ذلك. لغة الويب الديناميكية المحتملة هي asp كمثال (احصل على قائمة أصدقاء المستخدم على موقع Redekuai وأعد تنسيق بيانات xml)
<%
ع = " http://redekuai.com/api/user_friends_xml/funy "
Response.BinaryWrite ZQcnGet(ع)
الاستجابة. فلوش
الدالة 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 = new StreamReader(wres.GetResponseStream(), resEncoding);
سلسلة html = sr.ReadToEnd();
الاستجابة. الكتابة (أتش تي أم أل)؛
sr.Close();
wres.Close();
}
}
على التوالي proxy.asp proxy.php proxy.aspx
إذن ما هي الأهمية العملية للقيام بعمل جيد كوكيل وتمكين وصول نطاق js إلى موارد موقع الويب البعيد على جهازك العام (وليس خادم الويب)؟
كما تعلمون، دخلت تكنولوجيا الإنترنت الحالية عصر Mashup المطلق. هناك أكثر من 2000 شركة في الولايات المتحدة تعتمد على تطبيق Facebook للبقاء على قيد الحياة. هل صحيح أنه لا يمكن تطوير هذا النوع من السلسلة الصناعية الأجنبية في الصين؟ يجب أن تعلم أن الإنترنت سيصبح أيضًا البنية التحتية للصين في غضون 5 سنوات. هناك بالفعل مواقع ويب 2.0 جيدة نسبيًا تفتح واجهات برمجة التطبيقات (تقوم بالتصوير مرة أخرى، وتصبح ساخنة بسرعة) أو تستعد لفتحها.