当前位置: 首页 > news >正文

万能写入sql语句,并且防注入

通过perpare()方法和检查字段防sql注入.
$pdo=new PDO('mysql:host=localhost;dbname=scms', 'root' );
$_POST=array('title'=>23,'content'=>'kmm');
$keys= array_keys($_POST);
/**
 * $filetarr数组用于规定只可以写入的字段
 */
$filetarr=array('title','content');
/**
 *$tableName表的名字
 */
$tableName='article';
$filtre=true;
foreach ($keys as $value){
    if(in_array($value, $filetarr,true)){
        
    }else{
        //var_dump($value);
        $filtre=false;
        break;
    }
}


if($filtre){
    $fields=implode(',', $keys);
    $fieldszwh=':'.implode(',:', $keys);
    $sql="insert into {$tableName}({$fields}) values({$fieldszwh})";
    $pdostatement= $pdo->prepare($sql);
    $pdostatement->execute($_POST);
    var_dump($pdostatement->errorInfo());
}else{
    echo '非法字段';
}

 

2.万能条件语句,同样通过字段限制防注入

$pdo=new PDO('mysql:host=localhost;dbname=scms', 'root' );
$_POST=array('title'=>23,'content'=>'km'); $keys= array_keys($_POST); /** * $filetarr数组用于规定只可以写入的字段 */ $filetarr=array('title','content'); /** *$tableName表名 */ $tableName='article'; $filtre=true; $where=''; /** *$wherearr数组用来根据字段指定查询条件,例如大于,等于,like */ $wherearr=array('title'=>'like','content'=>'>%'); foreach ($keys as $value){ if(in_array($value, $filetarr,true)){ if($wherearr[$value]==='between'){ if(count(explode(',', $_POST[$value]))===1){ break; } $where.='and '.$value.' between '.":{$value}left".' and '.":{$value}right "; $_POST[$value]=explode(',', $_POST[$value]); $_POST[$value.'left']=$_POST[$value][0]; $_POST[$value.'right']=$_POST[$value][1]; unset($_POST[$value]); }else{ $where.='and '.$value.' '.$wherearr[$value].' '.":{$value} "; } }else{ //var_dump($value); $filtre=false; break; } } /** * *如果用or连接条件语句,截取前面两个字符 */ $where=substr($where,3); if($filtre){ $fields=implode(',', $keys); $fieldszwh=':'.implode(',:', $keys); $sql="select * from {$tableName} where {$where}"; var_dump($sql); $pdostatement= $pdo->prepare($sql); $pdostatement->execute($_POST); $re= $pdostatement->fetchAll(); var_dump($pdostatement->errorInfo()); var_dump($_POST); var_dump($re); }else{ echo '非法字段'; }

 

转载于:https://www.cnblogs.com/zuoxiaobing/p/3687824.html

相关文章:

  • 进程通信
  • Delphi控制Excel
  • Tigase XMPP Server源码部署
  • 在iphone越狱机器中使用Hook
  • 报错:具有键...的ViewData项属于类型...,但它必须属于类型IEnumerableSelectListItem...
  • DELPHI7在WIN8和WIN10下安装和运行
  • mysql 如何选择随机行
  • 字符串通信协议解析函数
  • 虚拟机下host-only模式服务器之间通信
  • DATASNAP远程方法返回TSTREAM正解
  • 对比学习UIKit和AppKit--入门级
  • SVM算法入门
  • 分布函数(连续型连续型)
  • iOS应用开发攻略(助你iOS开发中攻城拔寨)
  • 在Struts2标签s:textfield中显示正确的日期
  • JavaScript的使用你知道几种?(上)
  • PAT A1120
  • Sublime Text 2/3 绑定Eclipse快捷键
  • Twitter赢在开放,三年创造奇迹
  • windows下使用nginx调试简介
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 坑!为什么View.startAnimation不起作用?
  • 目录与文件属性:编写ls
  • 扑朔迷离的属性和特性【彻底弄清】
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​​​​​​​​​​​​​​Γ函数
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • $.proxy和$.extend
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (理论篇)httpmoudle和httphandler一览
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • .NET Core引入性能分析引导优化
  • .NET Micro Framework初体验
  • .NET MVC第五章、模型绑定获取表单数据
  • .net连接oracle数据库
  • .NET学习教程二——.net基础定义+VS常用设置
  • @Conditional注解详解
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(朱雀组)
  • [ACM] hdu 1201 18岁生日
  • [Angular 基础] - 自定义指令,深入学习 directive
  • [ARC066F]Contest with Drinks Hard
  • [Cocoa]iOS 开发者账户,联机调试,发布应用事宜
  • [flask] flask的基本介绍、flask快速搭建项目并运行
  • [IE编程] 如何获得IE版本号
  • [IT生活推荐]大家一起来玩游戏喽,来的都进!
  • [JavaEE系列] wait(等待) 和 notify(唤醒)
  • [LeeCode]-Divide Two Integers 不用乘除的除法运算
  • [Linux]----文件操作(复习C语言+文件描述符)
  • [selenium] Handling Untrusted SSL certificate error in firefox