详细介绍Web安全之XML注入的示例代码
XML注入攻击,和SQL注入的原理一样,都是攻击者输入恶意的代码来执行自身权限以外的功能。 XML是存储数据的一种方式,如果在修改或者查询时,没有做转义,直接输入或输出数据,都将导致XML注入漏洞。攻击者可以修改XML数据格式,增加新的XML节点,对数据处理流程产生影响。
攻击
下面是一个保存注册用户信息为XML格式的例子:
final String GUESTROLE = "guest_role"; ... //userdata是准备保存的xml数据,接收了name和email两个用户提交来的数据。 String userdata = "<USER role="+ GUESTROLE+ "><name>"+ request.getParameter("name")+ "</name><email>"+ request.getParameter("email")+ "</email></USER>"; //保存xml userDao.save(userdata);
可以看到,这段代码没有进行任何的过滤操作。一个普通用户注册后,会产生这样一条数据记录:
<?xml version="1.0" encoding="UTF-8"?> <USER role="guest_role"> <name>user1 </name> <email>user1@a.com </email> </USER>
攻击者输入自己email时,可以输入如下代码:
user1@a.com</email></USER><USER role="admin_role"><name>lf</name><email>user2@a.com
最终用户注册后,数据就变成了:
<?xml version="1.0" encoding="UTF-8"?> <USER role="guest_role"> <name>user1 </name> <email>user1@a.com</email> </USER> <USER role="admin_role"> <name>lf</name> <email>user2@a.com </email> </USER>
可以看到,多出了一条role=“admin_role”的管理员lf。达到攻击目的。
防御
还是那句老话,有攻击就有防御。防御的原理其实也很简单,就是对关键字符串进行转义:
& --> & < --> < > --> > " --> " ' --> '
在XML保存和展示之前,对数据部分,单独做转义即可:
String userdata = "<USER role="+ GUESTROLE+ "><name>"+ StringUtil.xmlencode(request.getParameter("name"))+ "</name><email>"+ StringUtil.xmlencode(rrequest.getParameter("email"))+ "</email></USER>";
这样就解决啦。
Atas ialah kandungan terperinci 详细介绍Web安全之XML注入的示例代码. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Bolehkah fail XML dibuka dengan PPT? XML, Extensible Markup Language (Extensible Markup Language), ialah bahasa markup universal yang digunakan secara meluas dalam pertukaran data dan penyimpanan data. Berbanding dengan HTML, XML lebih fleksibel dan boleh menentukan tag dan struktur datanya sendiri, menjadikan penyimpanan dan pertukaran data lebih mudah dan bersatu. PPT, atau PowerPoint, ialah perisian yang dibangunkan oleh Microsoft untuk membuat pembentangan. Ia menyediakan cara yang komprehensif untuk

Tukar data XML dalam Python kepada format CSV XML (ExtensibleMarkupLanguage) ialah bahasa penanda boleh diperluas yang biasa digunakan untuk penyimpanan dan penghantaran data. CSV (CommaSeparatedValues) ialah format fail teks dipisahkan koma yang biasa digunakan untuk import dan eksport data. Semasa memproses data, kadangkala data XML perlu ditukar kepada format CSV untuk analisis dan pemprosesan yang mudah. Python adalah yang kuat

Python menghuraikan aksara khas dan jujukan melarikan diri dalam XML XML (eXtensibleMarkupLanguage) ialah format pertukaran data yang biasa digunakan untuk memindahkan dan menyimpan data antara sistem yang berbeza. Semasa memproses fail XML, anda sering menghadapi situasi yang mengandungi aksara khas dan urutan melarikan diri, yang boleh menyebabkan ralat penghuraian atau salah tafsiran data. Oleh itu, apabila menghuraikan fail XML menggunakan Python, kita perlu memahami cara mengendalikan aksara khas dan urutan melarikan diri ini. 1. Watak istimewa dan

Cara mengendalikan format data XML dan JSON dalam pembangunan C# memerlukan contoh kod khusus Dalam pembangunan perisian moden, XML dan JSON ialah dua format data yang digunakan secara meluas. XML (Extensible Markup Language) ialah bahasa penanda yang digunakan untuk menyimpan dan menghantar data, manakala JSON (JavaScript Object Notation) ialah format pertukaran data yang ringan. Dalam pembangunan C#, kami selalunya perlu memproses dan mengendalikan data XML dan JSON Artikel ini akan memfokuskan pada cara menggunakan C# untuk memproses kedua-dua format data ini dan melampirkan

Menggunakan Python untuk melaksanakan pengesahan data dalam XML Pengenalan: Dalam kehidupan sebenar, kita sering berurusan dengan pelbagai data, antaranya XML (Extensible Markup Language) ialah format data yang biasa digunakan. XML mempunyai kebolehbacaan dan kebolehskalaan yang baik, dan digunakan secara meluas dalam pelbagai bidang, seperti pertukaran data, fail konfigurasi, dsb. Semasa memproses data XML, kami selalunya perlu mengesahkan data untuk memastikan integriti dan ketepatan data. Artikel ini akan memperkenalkan cara menggunakan Python untuk melaksanakan pengesahan data dalam XML dan memberikan yang sepadan

Jackson ialah perpustakaan berasaskan Java yang berguna untuk menukar objek Java kepada JSON dan JSON kepada objek Java. JacksonAPI lebih pantas daripada API lain, memerlukan kawasan memori yang kurang dan sesuai untuk objek besar. Kami menggunakan kaedah writeValueAsString() kelas XmlMapper untuk menukar POJO kepada format XML, dan tika POJO yang sepadan perlu dihantar sebagai parameter kepada kaedah ini. Sintaks publicStringwriteValueAsString(Objectvalue)throwsJsonProcessingExceptionExampleimp

PHP tergolong dalam bahagian belakang dalam pembangunan web. PHP ialah bahasa skrip sebelah pelayan, terutamanya digunakan untuk memproses logik sebelah pelayan dan menjana kandungan web dinamik. Berbanding dengan teknologi bahagian hadapan, PHP lebih banyak digunakan untuk operasi bahagian belakang seperti berinteraksi dengan pangkalan data, memproses permintaan pengguna dan menjana kandungan halaman. Seterusnya, contoh kod khusus akan digunakan untuk menggambarkan aplikasi PHP dalam pembangunan back-end. Mula-mula, mari kita lihat contoh kod PHP mudah untuk menyambung ke pangkalan data dan menanyakan data:

Kokpit ialah antara muka grafik berasaskan web untuk pelayan Linux. Ia bertujuan terutamanya untuk memudahkan pengurusan pelayan Linux untuk pengguna baharu/pengguna pakar. Dalam artikel ini, kami akan membincangkan mod akses Cockpit dan cara menukar akses pentadbiran kepada Cockpit daripada CockpitWebUI. Topik Kandungan: Mod Kemasukan Kokpit Mencari Mod Akses Kokpit Semasa Dayakan Capaian Pentadbiran untuk Kokpit daripada CockpitWebUI Melumpuhkan Capaian Pentadbiran untuk Kokpit daripada CockpitWebUI Kesimpulan Mod Kemasukan Kokpit Kokpit mempunyai dua mod capaian: Capaian Terhad: Ini adalah lalai untuk mod capaian kokpit. Dalam mod akses ini anda tidak boleh mengakses pengguna web dari kokpit
