Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Keselamatan Pelayan Linux: Mengeraskan Antara Muka Web untuk Menyekat Serangan XXE.

Keselamatan Pelayan Linux: Mengeraskan Antara Muka Web untuk Menyekat Serangan XXE.

王林
王林asal
2023-09-08 08:36:25749semak imbas

Keselamatan Pelayan Linux: Mengeraskan Antara Muka Web untuk Menyekat Serangan XXE.

Linux Server Security: Mengeraskan Antara Muka Web untuk Menyekat Serangan XXE

Pengenalan:
Dengan penggunaan aplikasi web yang meluas, keselamatan pelayan telah menjadi isu yang semakin membimbangkan pengguna Internet. Sejak beberapa tahun kebelakangan ini, entiti luar telah mengambil alih peranan untuk mengakses pelayan web dan melakukan tindakan berniat jahat yang boleh membawa kepada kompromi pelayan. Antaranya, serangan XXE adalah salah satu jenis serangan yang paling biasa dan berbahaya. Artikel ini akan memperkenalkan prinsip serangan XXE dan menyediakan langkah tentang cara mengeras antara muka web untuk mencegah serangan XXE dan meningkatkan keselamatan pelayan Linux.

1. Apakah itu serangan XXE?
Serangan XXE (Entiti Luar XML) ialah kaedah serangan yang mengeksploitasi kelemahan pada pelayan dengan menghantar fail XML yang dibina secara berniat jahat ke pelayan. Penyerang boleh menggunakan sambungan entiti dan entiti parameter untuk membaca fail, melaksanakan kod jauh dan operasi hasad lain, dengan itu mendapatkan maklumat sensitif dan mendapat akses tanpa kebenaran kepada pelayan.

Berikut ialah fail XML mudah yang digunakan untuk menunjukkan serangan XXE:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
    <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<root>
    <data>&xxe;</data>
</root>

Dalam fail XML di atas, fail /etc/passwd pada pelayan dibaca dengan menggunakan entiti luaran, mengakibatkan Maklumat sensitif telah bocor. . entiti untuk diselesaikan. Dalam fail konfigurasi PHP php.ini, tetapkan libxml_disable_entity_loader kepada true untuk melumpuhkan entiti luaran. /etc/passwd文件,导致敏感信息被泄露。

二、加固Web接口以阻止XXE攻击
为了防止XXE攻击,我们可以采取以下几个步骤:

  1. 禁用外部实体(Disable External Entities):
    为了阻止利用实体扩展进行XXE攻击,我们可以通过禁用外部实体来解决。在PHP的配置文件php.ini中,将libxml_disable_entity_loader设置为true,即可禁用外部实体。
libxml_disable_entity_loader(true);
  1. 验证用户输入(Validate User Input):
    对于用户输入的XML数据,我们要进行严格的输入验证,确保输入的数据符合预期的格式。可以使用XML Schema定义数据类型和结构,并对用户输入进行校验。

以下是一个简单的示例,展示了如何使用XML Schema验证数据:

<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schema.xsd">
    <data>Valid data</data>
</root>
  1. 使用白名单机制(Whitelist)过滤实体:
    使用白名单机制可以限制解析的实体,只允许解析预定义的实体。可以通过对解析的XML进行预处理,删除不需要的实体定义。以下是一个示例代码:
$xml = file_get_contents('php://input');
$xml = preg_replace('/<!ENTITY.*?>/', '', $xml);

上述代码使用正则表达式删除了XML文档中的实体定义。

  1. 使用安全的XML解析库:
    为了预防XXE攻击,我们应该尽可能使用安全的XML解析库,比如在PHP中使用SimpleXML库。SimpleXML提供了一些安全机制来防止XXE攻击。
$dom = new DOMDocument();
$dom->loadXML($xml, LIBXML_NOENT | LIBXML_NOERROR | LIBXML_NOWARNING);

上述示例中,通过设置LIBXML_NOENT | LIBXML_NOERROR | LIBXML_NOWARNING

rrreee

    Sahkan Input Pengguna:
    Untuk input data XML oleh pengguna, kami perlu melakukan pengesahan input yang ketat untuk memastikan data input mematuhi format yang diharapkan. Anda boleh menggunakan Skema XML untuk menentukan jenis dan struktur data serta mengesahkan input pengguna.

    Berikut ialah contoh mudah yang menunjukkan cara menggunakan Skema XML untuk mengesahkan data:
      rrreee
      1. Gunakan mekanisme senarai putih (Senarai Putih) untuk menapis entiti:
      2. Gunakan mekanisme senarai putih untuk mengehadkan entiti parsed , membenarkan hanya entiti yang dipratentukan untuk dihuraikan. Takrifan entiti yang tidak perlu boleh dialih keluar dengan mempraproses XML yang dihuraikan. Berikut ialah contoh kod:
      3. rrreee
      4. Kod di atas menggunakan ungkapan biasa untuk mengalih keluar definisi entiti dalam dokumen XML.
        1. Gunakan perpustakaan penghuraian XML yang selamat: 🎜Untuk mengelakkan serangan XXE, kita harus menggunakan perpustakaan penghuraian XML yang selamat sebanyak mungkin, seperti menggunakan perpustakaan SimpleXML dalam PHP. SimpleXML menyediakan beberapa mekanisme keselamatan untuk menghalang serangan XXE. 🎜🎜rrreee🎜Dalam contoh di atas, dengan menetapkan parameter LIBXML_NOENT | LIBXML_NOERROR |. 🎜🎜Kesimpulan: 🎜Untuk memastikan keselamatan pelayan Linux, adalah sangat penting untuk mencegah serangan XXE. Dengan melumpuhkan entiti luaran, mengesahkan input pengguna, menggunakan mekanisme senarai putih untuk menapis entiti dan menggunakan perpustakaan penghuraian XML yang selamat, kami boleh menghalang serangan XXE dengan berkesan. Bagi pentadbir pelayan, langkah seperti mengemas kini sistem pengendalian dan aplikasi pelayan secara kerap, memantau dan menganalisis fail log, dan menetapkan kata laluan yang kukuh juga merupakan amalan keselamatan pelayan yang sangat penting. Hanya dengan terus mengukuhkan keselamatan pelayan boleh melindungi keselamatan data tapak web dan pengguna dengan berkesan. 🎜🎜Rujukan: 🎜🎜🎜Panduan Pencegahan Serangan OWASP XXE - https://owasp.org/www-community/vulnerabilities/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet🎜🎜 ClassPHP -://www.ML /zh/class.simplexml_element.php🎜🎜DOMDocument class - https://www.php.net/manual/zh/class.domdocument.php🎜🎜

    Atas ialah kandungan terperinci Keselamatan Pelayan Linux: Mengeraskan Antara Muka Web untuk Menyekat Serangan XXE.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn