SQL注入安全

本文整理于网络,仅供阅读参考,如有不妥之处,敬请批评指正!如果您想加入微擎社区版技术大牛微信群和QQ群,请联系微信: ccccyyyy4444 或者 QQ:155120699 

SQL参数绑定

参数绑定就是绑定一个PHP变量到用作预处理的SQL语句中的对应命名占位符或问号占位符。可以有效的防止SQL注入。
注:要求无论何时尽量使用参数绑定的形式来构建SQL语句

在系统中直接运行SQL语句操作数据库的函数(pdo_fetch()pdo_fetchall()pdo_fetchcolumn()pdo_query())需要开发人员手动绑定参数,以 pdo_fetch() 函数为例:

$row = pdo_fetch("SELECT * FROM ".tablename('users')." WHERE username = :username", array(':username' => '米粥'));

上例中 :username 参数占位符,系统中只支持 :var 以冒号+变量名的占位符
第二个参数中 ‘:username’ 对应的值,则为要传入的真正的值

$row = pdo_fetch("SELECT * FROM ".tablename('users')." WHERE username LIKE :username", array(':username' => '%米%'));

上例中演示如何绑定Like查询

$row = pdo_query("DELETE FROM ".tablename('users')." WHERE uid = :uid", array(':uid' => '1'));
$row = pdo_query("DELETE FROM ".tablename('users')." WHERE uid IN (:uid_1, :uid_2, :uid_3)", array(':uid_1' => '1', ':uid_2' => '2', ':uid_3' => '3'));

禁用高危SQL函数、表达式

在微擎系统中,为了保证SQL注入安全,系统还禁用了一些SQL语句中高危的表达式、函数,开发者在开发模块时,尽量不要使用以下关键字。

禁用函数

  • load_file
  • hex
  • substring
  • if
  • ord
  • char
  • updatexml
  • floor
  • benchmark
  • reverse
  • strcmp
  • datadir
  • extractvalue
  • name_const
  • multipoint
  • database
  • user

禁用关键字

  • @
  • into outfile
  • into dumpfile
  • union select
  • union distinct
  • uniondistinct
  • information_schema
  • current_user
  • current_date
  • uniondistinct

禁用一切SQL注释

  • /*
  • */
  • #
  • --
本页目录
  1. SQL参数绑定
  2. 禁用高危SQL函数、表达式
文档统计
浏览次数:175473次
编辑次数:210次历史版本
最近更新:2023-01-16 16:16:34

如果看不懂微擎社区版二次开发手册或者遇到问题,请联系微信: ccccyyyy4444 或者 QQ:155120699 ,如果我们有空闲时间,可以免费为您答疑解惑。