Kata Pengantar
Dengan pembangunan Web2.0 dan populariti rangka kerja Ajax, aplikasi Web klien kaya (Rich Internet Applications, RIA) semakin meningkat dari hari ke hari, dan semakin banyak logik telah mula dipindahkan dari bahagian pelayan ke klien. Logik ini biasanya Semua ditulis menggunakan bahasa JavaScript. Tetapi malangnya, pembangun secara amnya tidak memberi banyak perhatian kepada keselamatan kod JavaScript. Menurut laporan trend jangka pertengahan IBM X-Force 2011, 40% daripada laman web Fortune 500 dan tapak web yang biasa diketahui mempunyai kelemahan keselamatan JavaScript. Artikel ini akan menunjukkan kepada pembaca kelemahan keselamatan JavaScript biasa dalam kombinasi dengan kod, bertujuan untuk membantu pembaca mengelakkan kelemahan keselamatan ini dalam kerja pengekodan harian. Selain itu, prinsip kelemahan keselamatan JavaScript sisi klien sedikit berbeza daripada kelemahan keselamatan bahagian pelayan Pada masa ini terdapat kesukaran teknikal utama dalam mengesan kelemahan keselamatan JavsScript secara automatik Artikel ini akan menggunakan kes untuk berkongsi dengan pembaca cara menggunakan ciri baharu teknologi IBM Rational AppScan Edisi Standard V8.0 (JavaScript Security Analyzer (JSA) mengesan kelemahan keselamatan JavaScript secara automatik.
Kerentanan keselamatan JavaScript biasa
Pada Disember 2010, IBM mengeluarkan kertas putih mengenai kelemahan keselamatan JavaScript sisi klien dalam aplikasi web, yang memperkenalkan tinjauan status keselamatan JavaScript yang dijalankan oleh Institut Penyelidikan Keselamatan IBM. Data sampel termasuk 675 tapak web, termasuk tapak web syarikat Fortune 500 dan 175 lagi tapak web terkenal, termasuk syarikat IT, syarikat perkhidmatan keselamatan aplikasi web, tapak rangkaian sosial, dsb. Untuk tidak menjejaskan operasi biasa tapak web ini, penyelidik menggunakan perangkak tidak mengganggu yang mengimbas hanya subset halaman yang boleh diakses tanpa log masuk, tidak lebih daripada 200 halaman setiap tapak. Halaman ini telah disimpan dan penyelidik menggunakan teknologi analisis keselamatan JavaScript IBM untuk menganalisis halaman ini di luar talian, memfokuskan pada skrip merentas tapak berasaskan DOM dan kelemahan pengalihan.
Hasil ujian adalah menakjubkan 14% daripada tapak web terkenal ini mempunyai masalah keselamatan JavaScript yang serius. Apa yang lebih menakjubkan ialah dengan kematangan teknologi analisis keselamatan JavaScript IBM, laporan pertengahan 2011 X-Force menunjukkan bahawa IBM menguji semula tapak web terkenal yang disebutkan di atas dan menemui lebih banyak kelemahan keselamatan, kira-kira 40% tapak web mempunyai keselamatan JavaScript. kelemahan.
Kod sumber rangka kerja keselamatan sejagat kebenaran peringkat perusahaan java SpringMVC mybatis atau hibernate ehcache shiro druid bootstrap HTML5
Artikel berikut akan menunjukkan kepada pembaca kelemahan keselamatan JavaScript biasa ini dalam kombinasi dengan kod, supaya pembaca dapat melihat isu keselamatan ini semasa proses pengekodan sebenar dan mengelakkan risiko ini seawal mungkin.
skrip merentas tapak berasaskan DOM
Kita semua pernah mendengar tentang XSS (Skrip Merentas Laman, juga dikenali sebagai serangan skrip merentas tapak), yang merujuk kepada penyerang memasukkan kod skrip berniat jahat (biasanya kod HTML dan JavaScript) ke dalam kod halaman web yang sah) dan kemudian menyerahkan meminta kepada pelayan, dan kemudian halaman respons pelayan ditanamkan dengan kod skrip hasad penyerang Penyerang boleh menggunakan kod skrip hasad ini untuk melakukan serangan seperti rampasan sesi. Skrip merentas tapak secara amnya dibahagikan kepada jenis reflektif dan berterusan: skrip merentas tapak reflektif berlaku apabila data permintaan diberikan tidak dikodkan dan tidak ditapis dalam halaman respons pelayan berterusan merujuk kepada data permintaan yang mengandungi kod berniat jahat Ia disimpan pada pelayan Aplikasi web. Setiap kali pengguna melawat halaman tertentu, kod berniat jahat akan dilaksanakan secara automatik. Terdapat dua cara utama untuk menangani skrip merentas tapak: pertama, jangan mempercayai sebarang input pengguna dan cuba gunakan teknologi senarai putih untuk mengesahkan parameter input kedua, melarikan diri daripada kandungan yang disediakan oleh pengguna semasa mengeluarkan;
Tetapi kurang diketahui bahawa terdapat jenis ketiga kerentanan skrip merentas tapak. Pada tahun 2005, Amit Klein menerbitkan kertas putih "Skrip Silang Tapak Berasaskan DOM atau XSS Jenis Ketiga" ("Skrip Silang Tapak Berasaskan DOM atau XSS Jenis Ketiga"), yang mendedahkan skrip merentas tapak berasaskan DOM kandungan tidak perlu bergantung pada respons sebelah pelayan Jika sesetengah halaman HTML menggunakan atribut elemen DOM seperti document.location, document.URL atau document.referer, penyerang boleh menggunakan atribut ini untuk menanam skrip berniat jahat untuk melaksanakan DOM-. rujukan silang berdasarkan serangan skrip tapak.
Di bawah ini kami akan menunjukkan prinsip skrip merentas tapak berasaskan DOM melalui halaman HTML yang sangat mudah. Katakan terdapat halaman HTML statik (ditunjukkan dalam Penyenaraian 1) yang memaparkan mesej mengalu-alukan pengguna untuk log masuk yang berjaya.
Senarai 1. Kod HTML dengan XSS berasaskan DOM
<HTML> <TITLE>Welcome!</TITLE> Hi <SCRIPT> var pos=document.URL.indexOf("name=")+5; document.write(document.URL.substring(pos,document.URL.length)); </SCRIPT> <BR> Welcome to our system … </HTML>
按照该页面 JavaScript 代码逻辑,它会接受 URL 中传入的 name 参数并展示欢迎信息,如清单 2 所示:
清单 2. 正常情况下的访问 URL
http://www.vulnerable.site/welcome.html?name=Jeremy
但如果恶意攻击者输入类似如下的脚本,见清单 3,该页面则会执行被注入的 JavaScript 脚本。
清单 3. 访问 URL 中注入脚本
http://www.vulnerable.site/welcome.html?name=>
很明显,受害者的浏览器访问以上 URL 的时候,服务器端会跟正常情况下一样返回清单 1 中所示 HTML 页面,然后浏览器会继续将这个 HTML 解析成 DOM,DOM 中包含的 document 对象的 URL 属性将包含清单 3 中注入的脚本内容,当浏览器解析到 JavaScript 的时候会执行这段被注入的脚本,跨站点脚本编制攻击即成功实现。
值得关注的是,通过以上示例可以看出,恶意代码不需要嵌入服务器的响应中,基于 DOM 的跨站点脚本编制攻击也能成功。可能某些读者会认为:目前主流浏览器会自动转义 URL 中的 '<' 和 '>' 符号,转义后的注入脚本就不会被执行了,基于 DOM 的跨站点脚本编制也就不再有什么威胁了。这句话前半段是对的,但后半段就不准确了。我们要意识到攻击者可以很轻松地绕过浏览器对 URL 的转义,譬如攻击者可以利用锚点 '#' 来欺骗浏览器,如清单 4 所示。浏览器会认为 '#' 后面的都是片段信息,将不会做任何处理。
清单 4. 访问 URL 中结合锚点注入脚本
http://www.vulnerable.site/welcome.html#?name=>
通过 URL 重定向钓鱼
网络钓鱼是一个通称,代表试图欺骗用户交出私人信息,以便电子欺骗身份。通过 URL 重定向钓鱼指的是 Web 页面会采用 HTTP 参数来保存 URL 值,且 Web 页面的脚本会将请求重定向到该保存的 URL 上,攻击者可以将 HTTP 参数里的 URL 值改为指向恶意站点,从而顺利启用网络钓鱼欺骗当前用户并窃取用户凭证。清单 5 给出了较为常见的含有通过 URL 重定向钓鱼漏洞的代码片段。
清单 5. 执行重定向的 JavaScript 代码片段
<SCRIPT> … var sData = document.location.search.substring(1); var sPos = sData.indexOf("url=") + 4; var ePos = sData.indexOf("&", sPos); var newURL; if (ePos< 0) { newURL = sData.substring(sPos); } else { newURL = sData.substring(sPos, ePos); } window.location.href = newURL; … </SCRIPT>
Ia boleh dilihat bahawa skrip JavaScript ini bertanggungjawab untuk melaksanakan pengalihan dan alamat baharu dipintas daripada nilai atribut elemen DOM seperti document.location, document.URL atau document.referer, seperti yang ditunjukkan dalam input pengguna Penyenaraian 6.
Penyenaraian 6. URL untuk melakukan ubah hala
http://www.vulnerable.site/redirect.html?url=http://www.phishing.site
Nampaknya sebaik sahaja pengguna melaksanakan URL yang ditunjukkan dalam Penyenaraian 6, mereka akan diubah hala ke tapak web pancingan data. Prinsip kerentanan ini adalah mudah dan lebih mudah difahami daripada kelemahan pengalihan sisi pelayan. Walau bagaimanapun, dalam kes pancingan data melalui pengalihan semula URL, URL tapak pancingan data tidak akan dipintas dan ditapis oleh pelayan Oleh itu, kerentanan ini selalunya lebih tersembunyi daripada kerentanan pengalihan sisi pelayan.
Rujukan Kuki JavaScript Pelanggan
Kuki biasanya dibuat oleh pelayan web dan disimpan dalam penyemak imbas klien digunakan untuk menyimpan identiti pengguna, maklumat sesi dan juga maklumat kebenaran pada klien. Kod JavaScript pihak pelanggan boleh memanipulasi data kuki. Jika JavaScript digunakan pada bahagian klien untuk mencipta atau mengubah suai kuki tapak, penyerang boleh melihat kod, memahami logiknya dengan membaca kod dan juga menggunakan pengetahuan itu untuk mengubah suai kuki. Setelah kuki mengandungi maklumat penting, seperti maklumat kebenaran, penyerang boleh mengeksploitasi kelemahan ini dengan mudah untuk melakukan peningkatan keistimewaan dan serangan lain.
Rampasan JavaScript
Banyak aplikasi web menggunakan JSON sebagai mekanisme pemindahan data untuk Ajax, yang biasanya terdedah kepada serangan rampasan JavaScript, manakala aplikasi web tradisional kurang terdedah. JSON sebenarnya adalah sebahagian daripada JavaScript, biasanya dalam format tatasusunan. Penyerang memanggil antara muka data dinamik JSON bagi tapak yang diserang melalui teg