php - 转义字符串是什么意思?

标签 php mysql security escaping

我正在阅读 Does $_SESSION['username'] need to be escaped before getting into an SQL query?它说“您需要转义传递给 sql 查询的每个字符串,无论其来源如何”。现在我知道这样的事情真的很基本。谷歌搜索出现了超过 20,000 个结果。仅 Stackoverflow 就有 20 页的结果,但没有人真正解释什么是转义字符串或如何进行转义。这只是假设。你能帮助我吗?我想学习,因为我一如既往地使用 PHP 制作 Web 应用程序。

我看过: Inserting Escape Characters , What are all the escape characters in Java? , Cant escape a string with addcslashes() , Escape character , what does mysql_real_escape_string() really do? , How can i escape double quotes from a string in php? , MySQL_real_escape_string not adding slashes? , remove escape sequences from string in php我可以继续,但我相信你明白这一点。这不是懒惰。

最佳答案

转义字符串意味着减少该字符串中使用的引号(和其他字符)中的歧义。例如,在定义字符串时,通常用双引号或单引号将其括起来:

"Hello World."

但是如果我的字符串中有双引号呢?

"Hello "World.""

现在我有歧义 - 解释器不知道我的字符串在哪里结束。如果我想保留我的双引号,我有几个选择。我可以在我的字符串周围使用单引号:

'Hello "World."'

或者我可以逃避我的报价:

"Hello \"World.\""

任何以斜线开头的引号都被转义,并被理解为字符串值的一部分。

当涉及到查询时,MySQL 会监视某些关键字,我们不能在查询中使用这些关键字,否则会造成一些困惑。假设我们有一个值表,其中一列名为“Select”,我们想选择它:

SELECT select FROM myTable

我们现在在查询中引入了一些歧义。在我们的查询中,我们可以通过使用反引号来减少这种歧义:

SELECT `select` FROM myTable

这消除了我们在选择字段名称时使用错误判断引入的困惑。

只需通过 mysql_real_escape_string() 传递您的值即可为您处理很多问题。 .在下面的示例中,您可以看到我们通过此函数传递用户提交的数据,以确保它不会对我们的查询造成任何问题:

// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
            mysql_real_escape_string($user),
            mysql_real_escape_string($password));

还有其他方法可用于转义字符串,例如 add_slashesaddcslashesquotemeta 等,但您会发现当目标是运行一个安全的查询,大部分开发人员更喜欢 mysql_real_escape_stringpg_escape_string(在 PostgreSQL 的上下文中。

关于php - 转义字符串是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10646142/

相关文章:

javascript - Access-Control-Allow-Origin 不 checkin chrome 扩展

security - JACC 提供程序如何使用其部署的服务器的主体到角色映射功能?

php - 如何在 PHP 中按日期对 MySQL 条目进行排序?

mysql - 回滚后返回空表

mysql - 在 MySQL 中删除之前检查外键引用的方法?

mysql - 使用 MySQL 中同一个表的 COUNT 连接两个查询

asp.net - ASP.NET 的机器 key 验证 key 的用途是什么

php - 如何从包中创建自定义航海者表单字段?

php - OctoberCMS组件导致内存错误

php - codeigniter如何在函数内的模型页面中回显获取的值