Rumah pembangunan bahagian belakang tutorial php 对于ThinkPHP框架早期版本的一个SQL注入漏洞详细分析_PHP

对于ThinkPHP框架早期版本的一个SQL注入漏洞详细分析_PHP

Jun 01, 2016 am 11:52 AM
suntikan sql rangka kerja thinkphp menganalisis celah-celah

ThinkPHP

ThinkPHP官网上曾有一段公告指出,在ThinkPHP 3.1.3及之前的版本存在一个SQL注入漏洞,漏洞存在于ThinkPHP/Lib/Core/Model.class.php 文件
根据官方文档对"防止SQL注入"的方法解释(参考http://doc.thinkphp.cn/manual/sql_injection.html)
使用查询条件预处理可以防止SQL注入,没错,当使用如下代码时可以起到效果:

$Model->where("id=%d and username='%s' and xx='%f'",array($id,$username,$xx))->select();
Salin selepas log masuk

或者

$Model->where("id=%d and username='%s' and xx='%f'",$id,$username,$xx)->select();
Salin selepas log masuk

但是,当你使用如下代码时,却没有"防止SQL注入"的效果(但是官方文档却说可以防止SQL注入):

$model->query('select * from user where id=%d and status=%s',$id,$status);
Salin selepas log masuk

或者

$model->query('select * from user where id=%d and status=%s',array($id,$status));
Salin selepas log masuk

原因分析:

ThinkPHP/Lib/Core/Model.class.php 文件里的parseSql函数没有实现SQL过滤.
其原函数为:

protected function parseSql($sql,$parse) {
// 分析表达式
if(true === $parse) {
  $options = $this->_parseOptions();
  $sql =  $this->db->parseSql($sql,$options);
}elseif(is_array($parse)){ // SQL预处理
  $sql = vsprintf($sql,$parse);
}else{
  $sql  =  strtr($sql,array('__TABLE__'=>$this->getTableName(),'__PREFIX__'=>C('DB_PREFIX')));
}
$this->db->setModel($this->name);
return $sql;
}
Salin selepas log masuk

验证漏洞(举例):
请求地址:

http://localhost/Main?id=boo" or 1="1
Salin selepas log masuk


http://localhost/Main?id=boo%22%20or%201=%221
Salin selepas log masuk

action代码:

$model=M('Peipeidui');
$m=$model->query('select * from peipeidui where name="%s"',$_GET['id']);
dump($m);exit;
Salin selepas log masuk

或者:

$model=M('Peipeidui');
$m=$model->query('select * from peipeidui where name="%s"',array($_GET['id']));
dump($m);exit;
Salin selepas log masuk

结果:

表peipeidui所有数据被列出,SQL注入语句起效.

解决方法:

可将parseSql函数修改为:

protected function parseSql($sql,$parse) {
// 分析表达式
if(true === $parse) {
  $options = $this->_parseOptions();
  $sql =  $this->db->parseSql($sql,$options);
}elseif(is_array($parse)){ // SQL预处理
  $parse = array_map(array($this->db,'escapeString'),$parse);//此行为新增代码
  $sql = vsprintf($sql,$parse);
}else{
  $sql  =  strtr($sql,array('__TABLE__'=>$this->getTableName(),'__PREFIX__'=>C('DB_PREFIX')));
}
$this->db->setModel($this->name);
return $sql;
}
Salin selepas log masuk

总结:
1.不要过分依赖TP的底层SQL过滤,程序员要做好安全检查
2.不建议直接用$_GET,$_POST

Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara melaksanakan statistik dan analisis data dalam uniapp Cara melaksanakan statistik dan analisis data dalam uniapp Oct 24, 2023 pm 12:37 PM

Cara melaksanakan statistik dan analisis data dalam uniapp 1. Pengenalan latar belakang Statistik dan analisis data merupakan bahagian yang sangat penting dalam proses pembangunan aplikasi mudah alih Melalui statistik dan analisis tingkah laku pengguna, pembangun boleh mempunyai pemahaman yang mendalam tentang pilihan dan penggunaan pengguna. tabiat. Dengan itu mengoptimumkan reka bentuk produk dan pengalaman pengguna. Artikel ini akan memperkenalkan cara melaksanakan statistik data dan fungsi analisis dalam uniapp, dan menyediakan beberapa contoh kod khusus. 2. Pilih statistik data dan alat analisis yang sesuai Langkah pertama untuk melaksanakan statistik dan analisis data dalam uniapp ialah memilih statistik data dan alat analisis.

Jailbreak mana-mana model besar dalam 20 langkah! Lebih banyak 'celah nenek' ditemui secara automatik Jailbreak mana-mana model besar dalam 20 langkah! Lebih banyak 'celah nenek' ditemui secara automatik Nov 05, 2023 pm 08:13 PM

Dalam masa kurang daripada satu minit dan tidak lebih daripada 20 langkah, anda boleh memintas sekatan keselamatan dan berjaya menjailbreak model besar! Dan tidak perlu mengetahui butiran dalaman model - hanya dua model kotak hitam perlu berinteraksi, dan AI boleh mengalahkan AI secara automatik dan bercakap kandungan berbahaya. Saya mendengar bahawa "Grandma Loophole" yang pernah popular telah diperbaiki: Sekarang, menghadapi "Detektif Loophole", "Adventurer Loophole" dan "Writer Loophole", apakah strategi tindak balas yang harus diguna pakai kecerdasan buatan? Selepas gelombang serangan, GPT-4 tidak tahan lagi, dan secara langsung mengatakan bahawa ia akan meracuni sistem bekalan air selagi... ini atau itu. Kuncinya ialah ini hanyalah gelombang kecil kelemahan yang didedahkan oleh pasukan penyelidik University of Pennsylvania, dan menggunakan algoritma mereka yang baru dibangunkan, AI boleh menjana pelbagai gesaan serangan secara automatik. Penyelidik mengatakan kaedah ini lebih baik daripada yang sedia ada

Nota Pembangunan Laravel: Kaedah dan Teknik untuk Mencegah Suntikan SQL Nota Pembangunan Laravel: Kaedah dan Teknik untuk Mencegah Suntikan SQL Nov 22, 2023 pm 04:56 PM

Nota Pembangunan Laravel: Kaedah dan Teknik untuk Mencegah SQL Injection Dengan perkembangan Internet dan kemajuan teknologi komputer yang berterusan, pembangunan aplikasi web telah menjadi semakin biasa. Semasa proses pembangunan, keselamatan sentiasa menjadi isu penting yang tidak boleh diabaikan oleh pembangun. Antaranya, mencegah serangan suntikan SQL adalah salah satu isu keselamatan yang memerlukan perhatian khusus semasa proses pembangunan. Artikel ini akan memperkenalkan beberapa kaedah dan teknik yang biasa digunakan dalam pembangunan Laravel untuk membantu pembangun mencegah suntikan SQL dengan berkesan. Menggunakan pengikatan parameter Pengikatan parameter ialah Lar

Analisis sebab mengapa direktori sekunder DreamWeaver CMS tidak boleh dibuka Analisis sebab mengapa direktori sekunder DreamWeaver CMS tidak boleh dibuka Mar 13, 2024 pm 06:24 PM

Tajuk: Analisis sebab dan penyelesaian mengapa direktori sekunder DreamWeaver CMS tidak boleh dibuka Dreamweaver CMS (DedeCMS) ialah sistem pengurusan kandungan sumber terbuka yang berkuasa yang digunakan secara meluas dalam pembinaan pelbagai laman web. Walau bagaimanapun, kadangkala semasa proses membina tapak web, anda mungkin menghadapi situasi di mana direktori sekunder tidak boleh dibuka, yang membawa masalah kepada operasi biasa tapak web. Dalam artikel ini, kami akan menganalisis kemungkinan sebab mengapa direktori sekunder tidak boleh dibuka dan memberikan contoh kod khusus untuk menyelesaikan masalah ini. 1. Analisis sebab yang mungkin: Masalah konfigurasi peraturan pseudo-statik: Semasa penggunaan

Model OpenAI DALL-E 3 mempunyai kelemahan yang menghasilkan 'kandungan yang tidak sesuai'. Model OpenAI DALL-E 3 mempunyai kelemahan yang menghasilkan 'kandungan yang tidak sesuai'. Feb 04, 2024 pm 02:40 PM

Menurut berita pada 2 Februari, Shane Jones, pengurus jabatan kejuruteraan perisian Microsoft, baru-baru ini menemui kelemahan dalam model DALL-E3 OpenAI, yang dikatakan boleh menjana satu siri kandungan yang tidak sesuai. Shane Jones melaporkan kelemahan itu kepada syarikat itu, tetapi diminta untuk merahsiakannya. Bagaimanapun, dia akhirnya memutuskan untuk mendedahkan kelemahan kepada dunia luar. ▲Sumber imej: Laporan yang didedahkan oleh ShaneJones Laman web ini mendapati bahawa ShaneJones mendapati melalui penyelidikan bebas pada Disember tahun lepas bahawa terdapat kelemahan dalam model DALL-E3 imej jana teks OpenAI. Kerentanan ini boleh memintas AI ​​Guardrail (AIGuardrail), menghasilkan penjanaan siri kandungan NSFW yang tidak sesuai. Penemuan ini menarik perhatian ramai

Analisis kes aplikasi Python dalam sistem pengangkutan pintar Analisis kes aplikasi Python dalam sistem pengangkutan pintar Sep 08, 2023 am 08:13 AM

Ringkasan analisis kes aplikasi Python dalam sistem pengangkutan pintar: Dengan perkembangan pesat sistem pengangkutan pintar, Python, sebagai bahasa pengaturcaraan berbilang fungsi, mudah dipelajari dan digunakan, digunakan secara meluas dalam pembangunan dan aplikasi sistem pengangkutan pintar. Artikel ini menunjukkan kelebihan dan potensi aplikasi Python dalam bidang pengangkutan pintar dengan menganalisis kes aplikasi Python dalam sistem pengangkutan pintar dan memberikan contoh kod yang berkaitan. Pengenalan Sistem pengangkutan pintar merujuk kepada penggunaan komunikasi moden, maklumat, penderiaan dan cara teknikal lain untuk berkomunikasi melalui

Analisis sama ada bahasa pengaturcaraan utama Tencent ialah Go Analisis sama ada bahasa pengaturcaraan utama Tencent ialah Go Mar 27, 2024 pm 04:21 PM

Tajuk: Adakah bahasa pengaturcaraan utama Tencent Go: Analisis mendalam Sebagai syarikat teknologi terkemuka di China, Tencent sentiasa menarik banyak perhatian dalam pilihan bahasa pengaturcaraannya. Dalam beberapa tahun kebelakangan ini, sesetengah orang percaya bahawa Tencent menggunakan Go sebagai bahasa pengaturcaraan utamanya. Artikel ini akan menjalankan analisis mendalam sama ada bahasa pengaturcaraan utama Tencent ialah Go dan memberikan contoh kod khusus untuk menyokong pandangan ini. 1. Aplikasi bahasa Go dalam Tencent Go ialah bahasa pengaturcaraan sumber terbuka yang dibangunkan oleh Google Kecekapan, kesesuaian dan kesederhanaannya disukai oleh banyak pembangun.

Analisis prestasi kod ThinkPHP6: mengesan kesesakan prestasi Analisis prestasi kod ThinkPHP6: mengesan kesesakan prestasi Aug 27, 2023 pm 01:36 PM

Analisis prestasi kod ThinkPHP6: mengesan kesesakan prestasi Pengenalan: Dengan perkembangan pesat Internet, analisis prestasi kod yang lebih cekap telah menjadi semakin penting bagi pembangun. Artikel ini akan memperkenalkan cara menggunakan ThinkPHP6 untuk melaksanakan analisis prestasi kod untuk mencari dan menyelesaikan kesesakan prestasi. Pada masa yang sama, kami juga akan menggunakan contoh kod untuk membantu pembaca memahami dengan lebih baik. Kepentingan Analisis Prestasi Analisis prestasi kod adalah bahagian penting dalam proses pembangunan. Dengan menganalisis prestasi kod, kita boleh memahami di mana banyak sumber digunakan

See all articles