当前位置: 首页 > 面试题库 >

PHP:mysql_real_escape_string是否足以清理用户输入?

温凯
2023-03-14
问题内容

mysql_real_escape_string在大多数情况下是否足以清洁用户输入?

::编辑::

我主要是在考虑防止SQL注入,但是我最终想知道在应用mysql_real_escape_string之后我是否可以信任用户数据,或者在将数据传递给应用程序和数据库之前是否应该采取额外的措施来清理数据。

我看到清理HTML字符的位置很重要,但是我认为信任用户输入是不必要的。

Ť


问题答案:

mysql_real_escape_string在所有情况下都不够,但是绝对是一个很好的朋友。该 更好的 解决方案是使用
预处理语句

//example from http://php.net/manual/en/pdo.prepared-statements.php

$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);

// insert one row
$name = 'one';
$value = 1;
$stmt->execute();

另外,不要忘记可以用来丢弃任何无效/可疑字符的 HTMLPurifier

......

编辑: 根据以下评论,我需要发布此链接(在造成混乱之前,我应该做的)

mysql_real_escape_string()与预备语句

报价:

mysql_real_escape_string()容易发生影响addslashes()的同类问题。

Chris Shiflett (安全专家)



 类似资料:
  • 问题内容: 是否有某个功能全面的功能可以很好地用于清理用户针对SQL注入和XSS攻击的输入,同时仍然允许某些类型的HTML标签? 问题答案: 常见的误解是可以过滤用户输入。PHP甚至有一个(现在已弃用的)“功能”,称为magic-quotes,它基于此思想。废话 忘记过滤(或清洁,或任何人称呼它)。 为避免出现问题,您应该做的事情很简单:每当将字符串嵌入外部代码中时,都必须根据该语言的规则对其进行

  • 问题内容: 我有一个HTML表单,可以接受用户输入的大小约为1000的文本,并将其提交到php页面,并将其存储在mysql数据库中。我将PDO与准备好的语句一起使用以防止sql注入。但是,要清理用户输入的文本,需要做的最大努力是什么? 我想防止任何脚本注入,xss攻击等。 问题答案: 安全是一个有趣的概念,吸引了很多人。不幸的是,这是一个复杂的主题,甚至专业人士也弄错了。我在Google(CSRF

  • 我一直在研究清理用户输入的最有效方法。我的应用程序是一个简单的post请求,用于对用户进行身份验证。在网上我可以找到十几种不同的“最佳”方法。这些方法中有很多都使用不推荐的php函数,或者看起来过于复杂。为了连接到我的sql数据库,我使用PDO类。 在搜索自己的函数时,我无意中发现: 带有绑定参数的预准备语句不仅更可移植、更方便、不受SQL注入的影响,而且通常比内插查询执行得快得多,因为服务器端和

  • 问题内容: 我正在考虑添加富文本编辑器,以允许非程序员更改文本的外观。但是,一个问题是,如果标记不正确,则可能会扭曲渲染页面的布局。什么是清除html的好方法? 问题答案: 您将不得不在好和轻量之间做出选择。推荐的选择是“HTMLPurifier”,因为它提供了安全的默认设置。作为更快的替代方法,通常建议使用“htmLawed”。

  • 问题内容: 我在AWS EC2上运行了一些Docker容器,/ var / lib / docker / overlay2文件夹的磁盘大小增长非常快。 我想知道删除其内容是否安全?或者docker是否具有某种命令来释放某些磁盘使用量。 更新: 我实际上已经尝试过,它回收了0Kb。 而且我的/ docker / overlay2磁盘大小比来自的输出大得多 阅读docker文档和BMitch的答案后,

  • 问题内容: 在PHP手册中,有一条注释: 注意:如果不使用此功能对数据进行转义,则该查询容易受到SQL注入攻击的攻击。 这足以进行反SQL注入吗?如果没有,您能举个例子和一个好的反SQL注入解决方案吗? 问题答案: 通常足以避免SQL注入。不过,这确实取决于它是否没有错误,即它 存在 脆弱性的可能性很小(但是这还没有在现实世界中体现出来)。准备好的语句是在概念上完全排除SQL注入的更好的替代方法。