首页 / PHP / php 防止sql注入
php 防止sql注入
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php 防止sql注入,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2982字,纯文字阅读大概需要5分钟。
内容图文
![php 防止sql注入](/upload/InfoBanner/zyjiaocheng/471/1500204adc0f4034802846c020f88318.jpg)
为什么会有注入漏洞呢?因为用户可以输入value‘); DROP TABLE table;--
然后查询语句就变成了这样
INSERT INTO `table` (`column`) VALUES(‘value‘); DROP TABLE table;--‘)
A:通过使用预编译语句(prepared statements)和参数化查询(parameterized queries)。
有两种方式去完成这个:
1. 使用PDO对象(对于任何数据库驱动都好用) $stmt = $pdo->prepare(‘SELECT * FROM employees WHERE name = :name‘); $stmt->execute(array(‘name‘ => $name));
2. 使用MySqli $stmt = $dbConnection->prepare(‘SELECT * FROM employees WHERE name = ?‘); $stmt->bind_param(‘s‘, $name); $stmt->execute();
================
通常有一下几种方法:
(1)输入验证和过滤
(2)预处理Sql语句
(3)采用存储过程
(4)输入白名单
(5)一般的简单过滤,直接用php的addslashes函数即可。
全面防注入:
function inject_check($sql_str) { return eregi(‘select|insert|update|delete|\‘|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile‘, $sql_str); // 进行过滤 } function verify_id($id=null) { if (!$id) { exit(‘没有提交参数!‘); } // 是否为空判断 elseif (inject_check($id)) { exit(‘提交的参数非法!‘); } // 注射判断 elseif (!is_numeric($id)) { exit(‘提交的参数非法!‘); } // 数字判断 $id = intval($id); // 整型化 return $id; }
function str_check( $str ) { if (!get_magic_quotes_gpc()) { // 判断magic_quotes_gpc是否打开 $str = addslashes($str); // 进行过滤 } $str = str_replace("_", "\_", $str); // 把 ‘_‘过滤掉 $str = str_replace("%", "\%", $str); // 把 ‘%‘过滤掉 return $str; }
function post_check($post) { if (!get_magic_quotes_gpc()) { // 判断magic_quotes_gpc是否为打开 $post = addslashes($post); // 进行magic_quotes_gpc没有打开的情况对提交数据的过滤 } $post = str_replace("_", "\_", $post); // 把 ‘_‘过滤掉 $post = str_replace("%", "\%", $post); // 把 ‘%‘过滤掉 $post = nl2br($post); // 回车转换 $post = htmlspecialchars($post); // html标记转换 return $post; }
/** * 转义需要插入或者更新的字段值 * * 在所有查询和更新的字段变量都需要调用此方法处理数据 * * @param mixed $str 需要处理的变量 * @return mixed 返回转义后的结果 */ public function escape($str) { if (is_array($str)) { foreach ($str as $key => $value) { $str[$key] = $this->escape($value); } } else { return addslashes($str); } return $str; }
使用实例:
public function _saveWithWhere($tableName, $row, $where, $sync = false) { // 生成要插入/更新的字段的SQL字符串 $values = ‘‘; foreach ($row as $searchKey => $val) { $values .= "`{$searchKey}` = ‘{escape($val)}‘,"; } $values = trim($values, ","); // 有itemId的话就UPDATE没有的话就INSERT if (trim($where)) { $sql = "UPDATE {$tableName} SET {$values} WHERE {$where} "; }else { $sql = "INSERT INTO {$tableName} SET {$values}"; } $this->saveLog($sql); // lib_DB->update 只返回 boolean 当 insert 的时候需要获取 last_id 就不行 return $this->_update($sql, $sync); }
其他重要:
1. http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php
php 防止sql注入
标签:
本文系统来源:http://www.cnblogs.com/jkmiao/p/5940325.html
内容总结
以上是互联网集市为您收集整理的php 防止sql注入全部内容,希望文章能够帮你解决php 防止sql注入所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。