Bre*_*ett 74 php mysql security escaping
我正在阅读$ _SESSION ['username']是否需要在进入SQL查询之前进行转义?并且它说"你需要转义你传递给sql查询的每个字符串,无论它的来源如何".现在我知道这样的事情是非常基本的.谷歌搜索结果超过20,000.Stackoverflow本身只有20页的结果,但没有人真正解释什么是字符串转义或如何做.这只是假设.你能帮助我吗?我想学习,因为我一直在用PHP制作一个Web应用程序.
我看过: 插入转义字符,Java中的所有转义字符是什么?, 无法通过addcslashes(), Escape字符转义字符串, mysql_real_escape_string()真正做了什么?, 我如何从PHP中的字符串中转义双引号?, MySQL_real_escape_string没有添加斜杠?, 从PHP中的字符串中删除转义序列我可以继续,但我相信你明白了.这不是懒惰.
Sam*_*son 124
转义字符串意味着减少该字符串中使用的引号(和其他字符)的歧义.例如,当您定义字符串时,通常用双引号或单引号括起来:
"Hello World."
Run Code Online (Sandbox Code Playgroud)
但是,如果我的字符串中有双引号怎么办?
"Hello "World.""
Run Code Online (Sandbox Code Playgroud)
现在我有歧义 - 翻译不知道我的字符串在哪里结束.如果我想保留双引号,我有几个选择.我可以在我的字符串周围使用单引号:
'Hello "World."'
Run Code Online (Sandbox Code Playgroud)
或者我可以逃避我的报价:
"Hello \"World.\""
Run Code Online (Sandbox Code Playgroud)
任何以斜杠开头的引用都将被转义,并被理解为字符串值的一部分.
在查询时,MySQL有一些它所监视的关键字,我们不能在查询中使用它们而不会造成一些混淆.假设我们有一个值表,其中一列被命名为"Select",我们想要选择:
SELECT select FROM myTable
Run Code Online (Sandbox Code Playgroud)
我们现在已经在查询中引入了一些含糊之处.在我们的查询中,我们可以通过使用反向标记来减少这种模糊性:
SELECT `select` FROM myTable
Run Code Online (Sandbox Code Playgroud)
这消除了我们在选择字段名称时使用不良判断所引入的混淆.
只需传递您的值,就可以为您处理很多这样的事情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));
Run Code Online (Sandbox Code Playgroud)
其他方法转义字符串,如存在add_slashes,addcslashes,quotemeta,和更多的,但你会发现,当我们的目标是运行安全的查询,由大开发商喜欢mysql_real_escape_string或pg_escape_string(在PostgreSQL中的上下文.
Joh*_*nde 20
某些字符对您正在使用的SQL数据库具有特殊含义.在查询中使用这些字符时,它们可能会导致意外和/或意外行为,包括允许攻击者危害您的数据库.为了防止这些字符以这种方式影响查询,需要对其进行转义,或者以不同的方式说明,需要告知数据库不要将它们视为此查询中的特殊字符.
在的情况下mysql_real_escape_string(),它避开\x00,\n,\r,\,',"和\x1a作为这些中,当没有逃脱,可引起前面提到的问题,其包括与一个MySQL数据库的SQL注入.
| 归档时间: |
|
| 查看次数: |
68566 次 |
| 最近记录: |