万能写入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');

$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 article({$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');

$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 article 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 '非法字段';

}

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-10-26 21:19:33

万能写入sql语句,并且防注入的相关文章

php简单实现sql防注入的方法_php技巧

本文实例讲述了php简单实现sql防注入的方法.分享给大家供大家参考,具体如下: 这里没有太多的过滤,主要是针对php和mysql的组合. 一般性的防注入,只要使用php的 addslashes 函数就可以了. 以下是一段copy来的代码: PHP代码: $_POST = sql_injection($_POST); $_GET = sql_injection($_GET); function sql_injection($content) { if (!get_magic_quotes_gpc

SQL Injection with MySQL 注入分析_安全教程

声明 本文仅用于教学目的,如果因为本文造成的攻击后果本人概不负责,本文所有代码均为本人所写,所有数据均经过测试.绝对真实.如果有什么遗漏或错误,欢迎来安全天使论坛和我交流. 前言 2003年开始,喜欢脚本攻击的人越来越多,而且研究ASP下注入的朋友也逐渐多了起来,我看过最早的关于SQL注入的文章是一篇99年国外的高手写的,而现在国外的已经炉火纯青了,国内才开始注意这个技术,由此看来,国内的这方面的技术相对于国外还是有一段很大差距,话说回来,大家对SQL注入攻击也相当熟悉了,国内各大站点都有些堪称

关于在Java代码中写Sql语句需要注意的问题

最近做程序,时不时需要自己去手动将sql语句直接写入到Java代码中,写入sql语句时,需要注意几个小问题. 先看我之前写的几句简单的sql语句,自以为没有问题,但是编译直接报错. String str = "insert into XXX(a,b,c) values ('"a.getA()"','"a.getB()"','"a.getC()"');"; 研究了半天发现应该是连接字符串问题,第一次修改过后将赋值字段前后加&qu

hibernate sql语句

问题描述 Session sess = HibernateSessionFactory.getSession();Transaction tran = sess.beginTransaction();String sql = "insert into news(id,title,time,type1,context) values("+news.getId()+",'"+news.getTitle()+"','"+news.getTime()+&

mysql语句转义,sql特殊字符转义(sql防注入)

具体方法 当sql where 条件等于一串特殊符号时候 就容易报错,切断,甚至不执行,或者造成数据库危险. 下面我们简单测试下 创建测试数据  代码如下 复制代码 DROP TABLE IF EXISTS `user`; CREATE TABLE `user` (   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,   `name` varchar(255) DEFAULT NULL,   PRIMARY KEY (`id`) ) ENGINE=I

php防止sql语句注入常用方法:过滤法

php防止sql语句注入常用方法:过滤法 <? $id=$_GET["id"]; $query="SELECT * FROM my_table where id='".$id."'"; //注入漏洞$result=mysql_query($query); 这里很明显我们可以用注入来获得数据库的其它内容了. 可以用下面的方法防止注入. 注入一样的,大家可以看看以前的黑防.然后我们看下面通过post方法获取变量的处理: $text1=$_POS

防止SQL语句注入攻击总结

-----解决方案-------------------------------------------------------- 过滤URL中的一些特殊字符,动态SQL语句使用PrepareStatement.. ------解决方案-------------------------------------------------------- 注入的方式就是在查询条件里加入SQL字符串. 可以检查一下提交的查询参数里是否包含SQL,但通常这样无益. 最好的办法是不要用拼接SQL字符串,可以用

拒绝攻击 万能Asp防注入代码

防注入|攻击 这几天着实为sql注入漏洞伤了神,网上的代码好多不是很深奥就是麻烦.终于找到了万能防注代码,分享了,呵呵 .操作简单上手,只要来个包含或放入conn.asp中,搞定.末了,估计还有一些危险字符没有放全,帮我补全一下,谢谢了! <% ''''--------定义部份------------------ Dim Fy_Post,Fy_Get,Fy_In,Fy_Inf,Fy_Xh,Fy_db,Fy_dbstr ''''自定义需要过滤的字串,用 "防" 分隔 Fy_In =

SQL注入不完全思路与防注入程序

程序|防注入 SQL注入不完全思路与防注入程序 [ 繁體中文 ] | 文章类别:数据库安全 | 文章等级: | 发表日期:2005-2-13  星期日 [ 计数器 | 精彩博客 | 魔法表情 | 博客申请 | 源码下载 | IP查询 | Html2Js ] 转自:动态网制作指南 www.knowsky.com <一>SQL注入简介 许多网站程序在编写时,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.用户可以提交一段数据库查询代码,(一般是在浏览器地址栏进行,通过正常的www端口访