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

Nginx是一个快速、高性能、可扩展的Web服务器,它的安全性是Web应用程序开发中不可忽略的问题。尤其是SQL注入攻击,它可以对Web应用程序造成巨大的破坏。在本篇文章中,我们将讨论如何使用Nginx来防范SQL注入攻击,以保护Web应用程序的安全。什么是SQL注入攻击?SQL注入攻击是一种利用Web应用程序漏洞的攻击方式。攻击者会在Web应用程序中注入恶

0x01前言概述小编又在MySQL中发现了一个Double型数据溢出。当我们拿到MySQL里的函数时,小编比较感兴趣的是其中的数学函数,它们也应该包含一些数据类型来保存数值。所以小编就跑去测试看哪些函数会出现溢出错误。然后小编发现,当传递一个大于709的值时,函数exp()就会引起一个溢出错误。mysql>selectexp(709);+-----------------------+|exp(709)|+-----------------------+|8.218407461554972

PHP编程技巧:如何防止SQL注入攻击在进行数据库操作时,安全是至关重要的。SQL注入攻击是一种常见的网络攻击,它利用了应用程序对用户输入的不正确处理,从而导致恶意的SQL代码被插入并执行。为了保护应用程序免受SQL注入攻击的影响,我们需要采取一些防范措施。使用参数化查询参数化查询是最基本也是最有效的防范SQL注入攻击的方法。它通过将用户输入的值与SQL查询

PHPSQL注入漏洞的检测和修复概述:SQL注入是指攻击者利用Web应用程序对输入进行恶意注入SQL代码的一种攻击方式。PHP作为一种广泛应用于Web开发的脚本语言,被广泛用于开发动态网站和应用程序。然而,由于PHP的灵活性和易用性,开发者常常忽略了安全性,导致了SQL注入漏洞的存在。本文将介绍如何检测和修复PHP中的SQL注入漏洞,并提供相关代码示例。检

Laravel开发注意事项:防止SQL注入的方法与技巧随着互联网的发展和计算机技术的不断进步,Web应用程序的开发也变得越来越普遍。在开发过程中,安全性一直是开发者不可忽视的重要问题。其中,防止SQL注入攻击是开发过程中需要特别关注的安全问题之一。本文将介绍几种Laravel开发中常用的方法和技巧,帮助开发者有效地防止SQL注入。使用参数绑定参数绑定是Lar

在网络安全领域里,SQL注入攻击是一种常见的攻击方式。它利用恶意用户提交的恶意代码来改变应用程序的行为以执行不安全的操作。常见的SQL注入攻击包括查询操作、插入操作和删除操作。其中,查询操作是最常被攻击的一种,而防止SQL注入攻击的一个常用的方法是使用PHP。PHP是一种常用的服务器端脚本语言,它在web应用程序中的使用非常广泛。PHP可以与MySQL等关系

PHP表单过滤:SQL注入防范与过滤引言:随着互联网的快速发展,Web应用程序的开发变得越来越普遍。在Web开发中,表单是最常见的用户交互方式之一。然而,表单提交数据的处理过程中存在着安全风险。其中,最常见的风险之一就是SQL注入攻击。SQL注入攻击是一种利用Web应用程序对用户输入数据进行处理不当而导致攻击者能够执行非授权数据库查询的攻击方式。攻击者通过在

SQL注入是一种常见的网络攻击方式,它利用应用程序对输入数据的不完善处理,成功将恶意的SQL语句注入到数据库中。这种攻击方式特别常见于使用PHP语言开发的应用程序中,因为PHP对用户输入的处理通常相对较弱。本文将介绍一些应对SQL注入漏洞的策略,并提供PHP代码示例。使用预处理语句预处理语句是一种建议的防御SQL注入的方法。它使用绑定参数的方式,将输入数据与


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ホットトピック



