mysqli_real_escape_string 安全吗?

2024-01-03

我是 PHP 新手,我意识到使用 php 表单(带有用户和传递文本输入)的数据库连接是完全不安全的:

这是可行的,但不安全:

<?php
$link=mysqli_connect('localhost','xx','xx','xx');
$sql='  SELECT * FROM usuarios 
        WHERE username="'.$_POST['usuario'].'" 
        AND pass="'.$_POST['usuario'].'"
     ';
$rs=mysqli_query($link,$sql);
mysqli_close($link);
?>

所以,我读过有关 mysqli_real_escape_string 的内容,并决定尝试一下:

<?php    
$link=mysqli_connect('localhost','xx','xx','xx');
$usuario=mysqli_real_escape_string($link, $_POST["usuario"]);
$clave=mysqli_real_escape_string($link, $_POST["clave"]);
$sql='  SELECT * FROM usuarios 
        WHERE username="'.$usuario.'" 
        AND pass="'.$clave.'"
     ';
$rs=mysqli_query($link,$sql);
mysqli_close($link);
?>

它是否正确?这是如何使用 mysqli_real_escape_string 的好例子吗?


它是否正确?

是的。这个精心挑选的孤立示例是安全的。这并不意味着但是,mysqli_real_escape_string 应该被视为一个函数,其目的是防止 SQL 注入。因为在这个例子中它可以保护你只是偶然。下面提供的一个愚蠢的例子可以证明这一点:

$id = mysqli_real_escape_string($link, $_POST["id"]);
$sql = 'SELECT * FROM usuarios WHERE id = $id';
$rs = mysqli_query($link,$sql);

在这里,几乎任何 SQL 都可以添加到 $_POST["id"] 中并破坏数据库。

这是如何使用 mysqli_real_escape_string 的好例子吗?

一点也不

应放弃此功能,转而使用参数在查询中。除了字符串文字之外,此函数将使您无法处理任何查询部分。甚至可以简单地忽略。

A 占位符也称为参数,必须使用它来表示查询中的数据:

$sql = 'SELECT * FROM usuarios WHERE username=?';
$stmt = $conn->prepare($sql);
$stmt->bind_param("s", $_POST['usuario']);
$stmt->execute();
$rs = $stmt->get_result();

请参阅我的文章中的其他示例mysqli的正确使用 https://phpdelusions.net/mysqli

如果曾经使用过,这个函数必须封装到另一个既进行转义又添加引号的函数中,就像PDO::quote()做。只有这样,才会安全。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysqli_real_escape_string 安全吗? 的相关文章

  • 由商店经理根据指定的分类术语过滤 WooCommerce 订单

    我想将带有特定产品标签的订单分配给后端的特定商店经理 并隐藏其余订单 我目前正在使用WooCommerce 订单拆分器 https wordpress org plugins woo order splitter免费插件可按项目 产品 将订
  • PDO 连接字符串:最好的方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我想使用 php pdo 制作一个后端应用程序 我发现了很多不同的方法来处理 PDO 连接字符串 我想知道使用 pdo 执行连接字符串的最佳方法
  • PHP Imagick - setTextEncoding() 函数不起作用

    我正在尝试在 Imagick 对象上添加一些文本 但是我使用 setTextEncoding 函数 它仍然不起作用 draw new ImagickDraw draw gt setTextEncoding utf 8 draw gt set
  • PDF:在现有 PDF 文件中插入一行文本

    我有一个 PDF 文件 我希望在所有页面 前两页除外 的页脚上添加一行纯文本 不是徽标或类似内容 有谁有一个如何做到这一点的例子 用任何语言 Update 原始 PDF 是用 Scribus 制作的 我可以完全控制它 因此 如果更容易进行查
  • 未找到“Twilio\Rest\Client”类

    我正在尝试使用 twilio php api 这是我的代码
  • 搜索数组中的最高键/索引

    我怎样才能得到highest key index在一个数组中php questions tagged php 我知道如何为价值观做这件事 例如 我想从这个数组中得到10 as an integer value arr array 1 gt
  • 升级到 Yosemite 后 Apache 配置损坏

    昨天我升级到 Yosemite 现在我的 Web 开发本地配置不再起作用 我设法在下面设置了一个 userdir Users user public html我可以通过以下方式访问所有网站localhost user websitename
  • 如何在时事通讯中发送图像?

    谁能告诉我如何将图像作为时事通讯的主体部分发送 我如何从后端添加任何图像 以便当我向订阅者发送新闻通讯时 我想要显示的图像作为邮件的主体部分 实际上我想说的是 我有一个可以输入文本的表单 并且该文本在时事通讯中效果很好 现在我也想在表单中添
  • 如何在 WordPress 中添加 PHP 页面链接到我的页脚

    我创建了一个自定义 PHP 页面名称 privacy policy 名称为privacy php 我如何链接页脚中的页面 以便当有人点击隐私链接时页面打开 我已在此页面中调用页眉和页脚 这个怎么做 谢谢 In the wp content
  • 在 Twig 中使用 PHP 函数

    我有一个 PHP 代码 用于在我的通用控制器中为我的 Twig 模板添加一个新类 opencart htdocs catalog controller common cart php 该代码应检查设备是否是移动设备 function onS
  • 设置了 @version $Id$ 的 SVN Checkout

    我在 Subversion 中进行开发 在每个 PHP 文件的顶部都有以下注释块
  • 在 tumblr 主题中显示当前年份

    我想在我的 Tumblr 主题的页脚中放置一个版权声明 例如 Acme Co 2013 但我不想每年都进行更新 通常使用 php 可以使用date 这很好 但是虽然 Tumblr 是基于 php 构建的 但我认为最终用户不能在网站上使用它
  • Amazon ec2 无法在 ios 上发送推送通知

    我在 Amazon ec2 php 7 中使用以下 php 代码
  • 我需要编写什么代码才能使用 HTTPS?

    在标准的 小册子 站点中 我有一个子系统 其中私人数据在一系列页面中来回传递 该网站已完成 现在可以在没有 HTTPS 的情况下运行 有人可以向我指出在网站的安全部分实施 HTTPS 所需执行的步骤列表吗 作为程序员 您唯一需要做的就是检查
  • 在 VS Code 中调试 PHPUnit 测试?

    我最近配置了 VS code 以使用 xdebug 调试 PHP 它与我的应用程序代码一起可靠地工作 但是当我使用 PHPunit 运行单元测试时 我的断点被忽略 我的服务器在一个流浪盒子内运行 My php ini文件包含以下行 xdeb
  • 如何在 Centos 7 上手动安装 PHP-Zts

    我想安装 pthreads 当我尝试安装时 我会收到此错误 checking for ZTS no configure error pthreads requires ZTS please re compile PHP with ZTS e
  • 来自发布数据的 CodeIgniter 未通过

    我试图在 CodeIgniter 中上传文件 但是当我添加 enctype multipart form data 时 不会有任何发布数据通过 甚至其他领域也根本没有 但是 当我不添加它时 我可以获得其他帖子数据 但当然没有文件上传 这里出
  • 使用 PDO 的基于 PHP 类的用户系统 - 调用非对象上的成员函数prepare()

    我做了相当多的研究 故障排除和搜索 试图解决我的问题 但没有运气 所以这是错误 调用非对象上的成员函数prepare 生成此错误的代码位于我的用户 Auth 类中 如下所示 this gt dbManager gt db gt prepar
  • 如何从 PHP 的 sha256 加密迁移到 bcrypt?

    登录 rows sql gt fetch PDO FETCH ASSOC us id rows id us pass rows password us salt rows password salt status rows attempt
  • 使用 Javascript 编辑和保存用户 HTML - 安全性如何?

    例如我有一个Javascript 支持的表单创建工具 您可以使用链接添加元素的 html 块 如输入字段 并使用 TinyMCE 来编辑文本 这些是通过自动保存功能保存的 该功能在特定事件的后台执行 AJAX 调用 被调用的保存函数负责数据

随机推荐