栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

PHP MySQLI防止SQL注入[重复]

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PHP MySQLI防止SQL注入[重复]

任何查询都可以被注入,无论是读取还是写入,持久性还是瞬时性。可以通过结束一个查询并运行一个单独的查询(可能带有

mysqli
)来执行注入,这会使所需的查询变得无关紧要。

来自外部源的查询的任何输入,无论是来自用户还是内部的输入,都应视为该查询的参数以及该查询上下文中的参数。查询中的任何参数都需要参数化。这会导致参数化查询正确,您可以从中创建准备好的语句并使用参数执行。例如:

SELECt col1 FROM t1 WHERe col2 = ?

?
是参数的占位符。使用
mysqli
,您可以使用创建一个准备好的语句,使用来
prepare
将变量(参数)绑定到参数
bind_param
,然后使用来运行查询
execute
。您根本不需要清理参数(实际上这样做是有害的)。
mysqli
为您做到这一点。整个过程将是:

$stmt = $mysqli->prepare("SELECt col1 FROM t1 WHERe col2 = ?");$stmt->bind_param("s", $col2_arg);$stmt->execute();

参数化查询预备语句 之间也有重要区别。该语句在准备时并未进行参数化,因此容易注入:

$stmt = $mysqli->prepare("INSERT INTO t1 VALUES ($_POST[user_input])");

总结一下:

  • 所有 查询都应正确参数化(除非它们没有参数)
  • __不论其来源如何,查询的 所有 参数都应被视为具有敌意


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/432696.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号