ホームページ php教程 php手册 对于ThinkPHP框架早期版本的一个SQL注入漏洞详细分析

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

Jun 13, 2016 am 09:32 AM
SQLインジェクション 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();
ログイン後にコピー

或者

$Model->where("id=%d and username='%s' and xx='%f'",$id,$username,$xx)->select();
ログイン後にコピー

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

$model->query('select * from user where id=%d and status=%s',$id,$status);
ログイン後にコピー

或者

$model->query('select * from user where id=%d and status=%s',array($id,$status));
ログイン後にコピー

原因分析:

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;
}
ログイン後にコピー

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

http://localhost/Main?id=boo" or 1="1
ログイン後にコピー


http://localhost/Main?id=boo%22%20or%201=%221
ログイン後にコピー

action代码:

$model=M('Peipeidui');
$m=$model->query('select * from peipeidui where name="%s"',$_GET['id']);
dump($m);exit;
ログイン後にコピー

或者:

$model=M('Peipeidui');
$m=$model->query('select * from peipeidui where name="%s"',array($_GET['id']));
dump($m);exit;
ログイン後にコピー

结果:

表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;
}
ログイン後にコピー

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

uniapp でデータの統計と分析を実装する方法 uniapp でデータの統計と分析を実装する方法 Oct 24, 2023 pm 12:37 PM

uniapp でデータの統計と分析を実装する方法 1. 背景の紹介 データの統計と分析はモバイル アプリケーション開発プロセスの非常に重要な部分であり、ユーザーの行動の統計と分析を通じて、開発者はユーザーの好みと使用状況を深く理解できます。これにより、製品デザインとユーザーエクスペリエンスが最適化されます。この記事では、uniapp にデータの統計と分析機能を実装する方法と、いくつかの具体的なコード例を紹介します。 2. 適切なデータ統計および分析ツールの選択 uniapp でデータ統計および分析を実装する最初のステップは、適切なデータ統計および分析ツールを選択することです。

20 のステップでどんな大きなモデルも脱獄できます!さらに多くの「おばあちゃんの抜け穴」が自動的に発見される 20 のステップでどんな大きなモデルも脱獄できます!さらに多くの「おばあちゃんの抜け穴」が自動的に発見される Nov 05, 2023 pm 08:13 PM

1 分以内、わずか 20 ステップで、セキュリティ制限を回避し、大規模なモデルを正常にジェイルブレイクできます。そして、モデルの内部詳細を知る必要はありません。対話する必要があるのは 2 つのブラック ボックス モデルだけであり、AI は完全に自動的に AI を倒し、危険な内容を話すことができます。かつて流行った「おばあちゃんの抜け穴」が修正されたと聞きました。「探偵の抜け穴」「冒険者の抜け穴」「作家の抜け穴」に直面した今、人工知能はどのような対応戦略をとるべきでしょうか?波状の猛攻撃の後、GPT-4 はもう耐えられなくなり、このままでは給水システムに毒を与えると直接言いました。重要なのは、これはペンシルベニア大学の研究チームによって明らかにされた脆弱性の小さな波にすぎず、新しく開発されたアルゴリズムを使用して、AI がさまざまな攻撃プロンプトを自動的に生成できるということです。研究者らは、この方法は既存のものよりも優れていると述べています

OpenAI DALL-E 3 モデルには「不適切なコンテンツ」を生成する脆弱性があり、Microsoft 社員が通報し、「緘口令」が敷かれました。 OpenAI DALL-E 3 モデルには「不適切なコンテンツ」を生成する脆弱性があり、Microsoft 社員が通報し、「緘口令」が敷かれました。 Feb 04, 2024 pm 02:40 PM

2 月 2 日のニュースによると、マイクロソフトのソフトウェア エンジニアリング部門マネージャーであるシェーン ジョーンズ氏は最近、一連の不適切なコンテンツを生成できると言われている OpenAI の DALL-E3 モデルの脆弱性を発見しました。 Shane Jones 氏はこの脆弱性を同社に報告しましたが、機密保持を求められました。しかし、最終的に彼はその脆弱性を外部に公開することにしました。 ▲画像出典:ShaneJonesが公開した報告書 当ウェブサイトでは、ShaneJonesが昨年12月に独自の調査を通じて、OpenAIのテキスト生成画像のDALL-E3モデルに脆弱性があることを発見したことに注目した。この脆弱性により AI ガードレール (AIGuardrail) がバイパスされ、一連の NSFW 不適切なコンテンツが生成される可能性があります。この発見は広く注目を集めました

DreamWeaver CMS のセカンダリディレクトリを開けない原因の分析 DreamWeaver CMS のセカンダリディレクトリを開けない原因の分析 Mar 13, 2024 pm 06:24 PM

タイトル: DreamWeaver CMS のセカンダリディレクトリを開けない原因と解決策の分析 Dreamweaver CMS (DedeCMS) は、さまざまな Web サイトの構築に広く使用されている強力なオープンソースのコンテンツ管理システムです。ただし、Web サイトの構築中に、セカンダリ ディレクトリを開けない状況が発生し、Web サイトの通常の動作に問題が発生することがあります。この記事では、セカンダリ ディレクトリを開けない考えられる理由を分析し、この問題を解決するための具体的なコード例を示します。 1. 考えられる原因分析: 疑似静的ルール構成の問題: 使用中

Laravel 開発ノート: SQL インジェクションを防ぐ方法とテクニック Laravel 開発ノート: SQL インジェクションを防ぐ方法とテクニック Nov 22, 2023 pm 04:56 PM

Laravel 開発ノート: SQL インジェクションを防ぐ方法とテクニック インターネットの発展とコンピューター技術の継続的な進歩に伴い、Web アプリケーションの開発はますます一般的になりました。開発プロセスにおいて、セキュリティは常に開発者にとって無視できない重要な問題でした。中でも SQL インジェクション攻撃の防止は、開発プロセスにおいて特に注意が必要なセキュリティ課題の 1 つです。この記事では、開発者が SQL インジェクションを効果的に防止できるように、Laravel 開発で一般的に使用されるいくつかの方法とテクニックを紹介します。パラメータバインディングの使用 パラメータバインディングはLarです

高度道路交通システムにおける Python アプリケーションの事例分析 高度道路交通システムにおける Python アプリケーションの事例分析 Sep 08, 2023 am 08:13 AM

インテリジェント交通システムにおける Python アプリケーションの事例分析の概要: インテリジェント交通システムの急速な発展に伴い、Python は多機能で学びやすく使いやすいプログラミング言語として、インテリジェント交通システムの開発と応用に広く使用されています。この記事では、高度道路交通システムにおける Python の適用事例を分析し、関連するコード例を示すことで、高度道路交通システムにおける Python の利点と応用の可能性を示します。はじめに インテリジェント交通システムとは、最新の通信、情報、センシング、その他の技術的手段を使用して通信することを指します。

ThinkPHP6 コードのパフォーマンス分析: パフォーマンスのボトルネックの特定 ThinkPHP6 コードのパフォーマンス分析: パフォーマンスのボトルネックの特定 Aug 27, 2023 pm 01:36 PM

ThinkPHP6 コード パフォーマンス分析: パフォーマンスのボトルネックの特定 はじめに: インターネットの急速な発展に伴い、より効率的なコード パフォーマンス分析が開発者にとってますます重要になってきています。この記事では、パフォーマンスのボトルネックを特定して解決するために、ThinkPHP6 を使用してコードのパフォーマンス分析を実行する方法を紹介します。同時に、読者の理解を深めるためにコード例も使用します。パフォーマンス分析の重要性 コードのパフォーマンス分析は、開発プロセスに不可欠な部分です。コードのパフォーマンスを分析することで、どこで多くのリソースが消費されているかを理解できます。

Tencent の主要なプログラミング言語が Go であるかどうかを分析する Tencent の主要なプログラミング言語が Go であるかどうかを分析する Mar 27, 2024 pm 04:21 PM

タイトル: テンセントの主要なプログラミング言語は Go ですか: 詳細な分析 中国の大手テクノロジー企業として、テンセントはプログラミング言語の選択において常に多くの注目を集めてきました。近年、テンセントは主に Go を主要なプログラミング言語として採用していると考える人もいます。この記事では、Tencent の主要なプログラミング言語が Go であるかどうかについて詳細な分析を行い、この見解を裏付ける具体的なコード例を示します。 1. Tencent における Go 言語の適用 Go は、Google によって開発されたオープンソースのプログラミング言語であり、その効率性、同時実行性、シンプルさにより多くの開発者に愛されています。

See all articles