php如何防止sql注入

php如何防止sql注入

简单的sql注入示例

例如,A有一个银行网站。已为银行客户提供了一个网络界面,以查看其帐号和余额。您的银行网站使用http://example.com/get_account_details.php?account_id=102等网址从数据库中提取详细信息。

例如,get_account_details.php的代码,如下所示:

$accountId = $_GET['account_id'];$query = "SELECT accountNumber, balance FROM accounts WHERE accountId = $accountId";

登录后复制

客户accountId通过查询字符串作为account_id传递。与上面的Url一样,如果用户的帐户ID为102并且它在查询字符串中传递。Php脚本将创建如下所示的查询。

$query = "SELECT accountNumber, balance FROM accounts WHERE accountId = 102";

登录后复制

accountId 102获取accountNumber和余额详细信息,并提供给客户。

立即学习“PHP免费学习笔记(深入)”;

相关推荐:《php教程》

我们假设另一个场景,智能客户已经通过了account_id,就像0 OR 1=1查询字符串一样。现在会发生什么?PHP脚本将创建如下所示的查询并在数据库上执行。

$query = "SELECT accountNumber, balance FROM accounts WHERE accountId = 0 OR 1=1";

登录后复制

查看由脚本和数据库返回的结果创建的查询。您可以看到此查询返回了所有帐号和可用余额。

这称为SQL注入。这是一个简单的方式,其实可以有很多方法来进行SQL注入。下面我们就来看一下如何使用PHP MySQLi驱动程序和PHP PDO驱动程序防止SQL注入。

使用PHP-MySQLi驱动程序

可以使用PHP-MySQLi驱动程序预处理语句来避免这些类型的SQL注入。

PHP防止SQL注入的代码如下:

$accountId = $_GET['account_id'];  if ($stmt = $mysqli->prepare('SELECT accountNumber, balance FROM accounts WHERE accountId = ?')) {       $stmt->bind_param("s", $accountId);      $stmt->execute();   $result = $stmt->get_result();   while ($row = $result->fetch_assoc()) { // do something here }      $stmt->close(); }

登录后复制

使用PHP-PDO驱动程序

可以使用PHP-PDO驱动程序prepare语句来避免这些类型的SQL注入。

PHP解决上面的SQL注入问题的代码如下:

$accountId = $_GET['account_id'];  if ($stmt = $pdo->prepare('SELECT accountNumber, balance FROM accounts WHERE accountId = :accountId')) {       $stmt->execute(array('name' => $name));   foreach ($stmt as $row) { // do something here }      $stmt->close(); }

登录后复制

以上就是php如何防止sql注入的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2525263.html

(0)
上一篇 2025年3月5日 18:06:29
下一篇 2025年3月5日 18:06:37

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • php如何防止后门

    php后门url的防范 所谓后门URL,是指虽然无需直接调用的资源,却可以直接通过URL访问。 例如,web应用程序可能向登入用户显示敏感信息。 相关推荐:《php入门教程》 代码示例: 立即学习“PHP免费学习笔记(深入)”; 登录后复制…

    2025年3月5日
    200
  • php如何搞斐波那契数列

    斐波那契数列(fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(leonardoda fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、2…

    2025年3月5日
    200
  • php技术都有哪些

    1、smarty模板的特点 速度快,编译型,缓存技术,插件机制,强大的表现逻辑 2、php的垃圾收集机制 PHP可以自动进行内存管理,清除不再需要的对象。 PHP使用了引用计数(reference counting)这种单纯的垃圾回收(ga…

    2025年3月5日
    200
  • php继承用引入父类吗

    php中类与继承 在php中,类型的继承使用extends关键字,而且最多只能继承一个父类,php不支持多继承。 class MyClass  {  public $dat = 0;  public function __construct…

    2025年3月5日
    200
  • php加密的文件怎么解密

    php加密的文件解密方法 我们知道对PHP代码加密有真加密与伪加密两种,真加密一般要通过运行PHP ext(一般用C实现)代码来加载PHP文件进行解码,要对这种文件解密,必须自己编译PHP解释器的源代码,通过Hook PHP解释器的解码函数…

    2025年3月5日
    200
  • php加密后可以直接运行吗

    加密后的php代码需要zendguardloader模块才能正常运行 下载ZendGuardLoader压缩包 下载好后解压压缩包,找到目录下的 ZendLoader.dll 文件,将它放到你的php目录下ext下,再编辑php.ini文件…

    2025年3月5日
    200
  • php加载html乱码

    php与html交互出现乱码 HTML部分 如果是html在head中添加: 登录后复制登录后复制 如果是html5: 登录后复制登录后复制 PHP部分 立即学习“PHP免费学习笔记(深入)”; 如果是在和html混排时建议在脚本首行添加:…

    2025年3月5日
    200
  • PHP检测是否是json

    php判断是否是json格式的方法 首先要记住json_encode返回的是字符串, 而json_decode返回的是对象 判断数据不是JSON格式: function is_not_json($str){     return is_nu…

    2025年3月5日
    200
  • PHP脚本主要用于哪些领域?

    php脚本主要应用领域 1、服务端脚本 这是 PHP 最传统,也是最主要的目标领域。 开展这项工作需要具备以下三点:PHP 解析器(CGI 或者服务器模块)、web 服务器和 web 浏览器。 需要在运行 web 服务器时,安装并配置 PH…

    2025年3月5日
    200
  • php数据库导出sql文件

    php数据库导出sql文件 php将mysql数据库整库导出生成sql文件的详细代码。 文件名:db_backup.php 源代码: <?php ini_set("max_execution_time", &quo…

    2025年3月5日
    200

发表回复

登录后才能评论