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

SQL注入,引号和PHP

常温文
2023-03-14
问题内容

我现在很困惑,想知道,如果您能为我解决问题。

在最新的Anon / Lulsec攻击之后,我开始质疑php / mysql的安全性。

所以,我想,我该如何保护PHP和Mysql。

问题:谁能向我解释,关于引号,处理PHP和Mysql的 最佳实践 是什么?

  • 尤其是在表单中,为了保护html,我需要某种htmlspecialchars,对吗?
  • 可以使用表单完全利用PHP吗?是否需要任何保护?
  • 我应该使用real_escape_string 只是 一个查询之前?在PHP中已经使用它是错/不好(请参见sanitize_post函数)?

目前,我正在使用以下功能。该函数“清除”所有$ _POST和$ _GET变量。这是“安全”的吗?

function sanitize_post($array) {
    global $db;
    if(is_array($array)) {
        foreach($array as $key=>$value) {
            if(is_array($array[$key])) {
                $array[$key] = sanitize_post($array[$key]);
            } elseif(is_string($array[$key])) {
                $array[$key] = $db->real_escape_string(strtr(stripslashes(trim($array[$key])), array("'" => '', '"' => '')));
            }
        }            
    } elseif(is_string($array)) {
        $array = $db->real_escape_string(strtr(stripslashes(trim($array)), array("'" => '', '"' => '')));
    }
    return $array;
}

我正在将PHP 5.3.5与Mysql 5.1.54一起使用。

谢谢。


问题答案:

没有什么比“普遍消毒”。让我们称其为 quota ,因为这就是全部。

引用时, 总是为 某些特定输出 引用文本 ,例如:

  1. mysql查询的字符串值
  2. like mysql查询表达式
  3. HTML代码
  4. json
  5. mysql正则表达式
  6. PHP正则表达式

对于每种情况,您都需要不同的引用,因为每种用法都存在于不同的语法上下文中。这也意味着 不应在PHP的输入处 进行
引用,而应在特定的输出处进行引用 !这就是为什么诸如此类magic_quotes_gpc的功能被损坏的原因(请确保始终将其关闭!!!)。

那么,在这些特殊情况下,将使用哪种方法进行报价?(随时纠正我,可能会有更多现代方法,但是这些方法对我有用)

  1. mysql_real_escape_string($str)
  2. mysql_real_escape_string(addcslashes($str, "%_"))
  3. htmlspecialchars($str)
  4. json_encode()-仅适用于utf8!我将函数用于iso-8859-2
  5. mysql_real_escape_string(addcslashes($str, '^.[]$()|*+?{}')) -在这种情况下,您不能使用preg_quote,因为反斜杠将被转义两次!
  6. preg_quote()


 类似资料:
  • 问题内容: 我一直读到魔术引号根本不能停止SQL注入,但是我不明白为什么不这样做!例如,假设我们有以下查询: 现在,如果用户输入make ,则查询将是: 反斜杠将由Magic Quotes添加,而不会造成任何损害! 有没有办法我看不到用户可以在此处绕过Magic Quote插入的地方? 问题答案: 技巧通常是传递一个二进制值,以使反斜杠成为有效的多字节字符的一部分。这是关于它的博客文章。

  • 问题内容: 我意识到在构建包含用户输入的查询时,参数化SQL查询是清理用户输入的最佳方法,但是我想知道使用用户输入并转义任何单引号并将整个字符串都用单引号引起来是怎么回事。这是代码: 用户输入的任何单引号都将替换为双单引号,这消除了用户结束字符串的能力,因此他们可能键入的其他任何内容(例如分号,百分号等)都将成为字符串的一部分,并且实际上并未作为命令的一部分执行。 我们使用的是Microsoft

  • 问题内容: 我对此情况有疑问。 我在存储过程中有这样的查询: 我的问题是,这容易受到SQL注入的攻击吗?我需要将其更改为以下内容吗?(?) 问题答案: 快速的答案是不。为了易于进行SQL注入,必须使用动态SQL执行。 这 将很容易受到攻击: 这也意味着这两个示例之间没有真正的区别(至少从安全角度而言)。

  • 主要内容:SQL 注入的危害,SQL 注入示例,防止 SQL 注入SQL 注入是一种代码渗透技术,是最常用的网络黑客技术之一。SQL 注入非常危险,可能会导致数据库中的数据被暴露,甚至被损坏。 通过网页输入框(<input> 标签、<textarea> 标签等)将恶意 SQL 代码提交给服务器是最常见的 SQL 注入方式之一。 当网站要求输入诸如用户名(用户ID)之类的内容时,通常会发生 SQL 注入。黑客会输入一条 SQL 语句,而不是用户名/用户ID,当页面

  • 有使用 SQL 语句操作数据库的经验朋友,应该都知道使用 SQL 过程中有一个安全问题叫 SQL 注入。所谓 SQL 注入,就是通过把 SQL 命令插入到 Web 表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令。 为了防止 SQL 注入,在生产环境中使用 OpenResty 的时候就要注意添加防范代码。 延续之前的 ngx_postgres 调用代码的使用,

  • 问题内容: 例如,运行查询并查看输出后, 我的输出如下 我将如何导出这些数据,使其看起来如下所示? 还是有一种方法可以在SQL中执行此操作以修改记录以包含引号? 因为在导出时,无论如何都会包含逗号,对吗? 问题答案: 如果您感兴趣的列不超过128个字符,则可以使用QUOTENAME函数。小心一点,因为任何超过128个字符的字符都会返回。