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

Codeigniter如何清除输入?

利永年
2023-03-14
问题内容

我正在构建Codeigniter应用程序,并且正在尽最大努力防止SQL注入。我正在使用Active Record方法构造所有查询。我知道Active
Record会自动清除输入内容,但是我想知道到底是什么程度?它只是转义所有引号,还是做更多呢?如何防止混淆的SQL注入或其他更高级的注入?

基本上,我正在寻找有关CI如何清理数据的深入说明。有人知道吗


问题答案:

完全像这样(对于MySQL驱动程序):

  • 尝试mysql_real_escape_string()(99%的情况会是这种情况)
  • 跌回 mysql_escape_string()
  • 跌回 addslashes()
  • 通过以下方式手动逃脱%_处于LIKE有条件的状态str_replace()

https://github.com/EllisLab/CodeIgniter/blob/develop/system/database/drivers/mysql/mysql_driver.php#L294

/**
* Escape String
*
* @access public
* @param string
* @param bool whether or not the string will be used in a LIKE condition
* @return string
*/
function escape_str($str, $like = FALSE)
{
    if (is_array($str))
    {
        foreach ($str as $key => $val)
        {
            $str[$key] = $this->escape_str($val, $like);
        }

        return $str;
    }

    if (function_exists('mysql_real_escape_string') AND is_resource($this->conn_id))
    {
        $str = mysql_real_escape_string($str, $this->conn_id);
    }
    elseif (function_exists('mysql_escape_string'))
    {
        $str = mysql_escape_string($str);
    }
    else
    {
        $str = addslashes($str);
    }

    // escape LIKE condition wildcards
    if ($like === TRUE)
    {
        $str = str_replace(array('%', '_'), array('\\%', '\\_'), $str);
    }

    return $str;
}

注意,这只是转义字符,因此MySQL查询不会中断或发生意外情况,并且仅在数据库查询的上下文中使用,以确保基于传递给它的内容正确的语法。

没有任何魔术可以确保所有数据在 任何
上下文(例如HTML,CSV或XML输出)中的安全,并且以防万一您正在考虑它:xss_clean()不是一种千篇一律的解决方案,也不是100%防弹的,有时实际上是非常不合适的。Active
Record类会自动进行查询转义,但是对于其他所有情况,您应该使用给定上下文的正确方式手动转义/清理数据,并使用 输出 而不是 输入



 类似资料:
  • 如何清除Java中的标准输入(术语)? A 关键是,如果用户错误地按下了回车键,它将被读取,因此测试将是错误的。我的目标是纠正这个错误。为此,我想有一个这样的算法: 但是我找不到一个办法。这篇文章似乎很有趣:获取剩余字符的数量,将跳过它们。只在纸上工作。如果通过多次按enter键来强调应用程序,则方法将返回 可以从该输入流中读取(或跳过)而不阻塞的字节数的估计值 因此,有时,返回值是错误的,至少有

  • 当Kubernetes pod进入状态时,您将修复底层问题。你怎么强迫它重新安排?

  • 问题内容: 我想清除表单中的文件输入。 我知道将源设置为相同的方法…但是该方法不会删除所选的文件路径。 注意 :我希望避免重新加载页面,重置表单或执行AJAX调用。 这可能吗? 问题答案: 如何删除该节点,创建一个具有相同名称的新节点?

  • 问题内容: 我正在尝试在我的PHP CLI应用程序上使用“实时”进度指示器。而不是输出为 我宁愿清除它,也只显示最新结果。system(“ command \ C CLS”)不起作用。也没有ob_flush(),flush()或我发现的其他任何东西。 我正在运行Windows 7 64位旗舰版,我注意到命令行输出是实时的,这是意外的。每个人都警告我说,不会…但是可以… 64位特权吗? 为帮助加油!

  • 问题内容: 在HTML5中,输入类型显示在右侧,带有一个小的X,它将清除文本框(至少在Chrome中,也许在其他语言中)。除了检测例如何时完全单击框或执行某种位置单击检测(x位置/ y位置)以外,是否有其他方法可以检测到在Java或jQuery中单击此X的方法? 问题答案: 实际上,每当用户搜索或用户单击“ x”时,都会触发一个“搜索”事件。这一点特别有用,因为它可以理解“增量”属性。 现在,话虽

  • 我试图清除一个输入的值取决于它是否找到一个id如果它找到一个现有的id js更新的值的输入但如果它不保持最后一个找到但我需要有明确的值,有人能告诉我怎么了吗: