gpt4 book ai didi

PHP/MySQL : Sanitizing user input - is this a bad idea?

转载 作者:行者123 更新时间:2023-11-29 01:06:06 25 4
gpt4 key购买 nike

我有一个“go”脚本,它可以获取任何其他请求的脚本,这就是我为清理用户输入而编写的内容:

foreach ($_REQUEST as $key => $value){
if (get_magic_quotes_gpc())
$_REQUEST[$key] = mysql_real_escape_string(stripslashes($value));
else
$_REQUEST[$key] = mysql_real_escape_string($value);
}

我还没有看到其他人使用这种方法。有什么理由不这样做吗?

编辑 - 修改为适用于数组:

function mysql_escape($thing) {
if (is_array($thing)) {
$escaped = array();
foreach ($thing as $key => $value) {
$escaped[$key] = mysql_escape($value);
}
return $escaped;
}
// else
if (get_magic_quotes_gpc()) $thing = stripslashes($thing);
return mysql_real_escape_string($thing);
}

foreach ($_REQUEST as $key => $value){
$_REQUEST[$key] = mysql_escape($value);
}

最佳答案

我发现在使用数据时转义数据要好得多,而不是在数据进入的途中。您可能想在 JSON、XML、Shell、MySQL、Curl 或 HTML 中使用该数据,并且每个都有它的自己转义数据的方式。


让我们快速回顾一下为什么在不同的上下文中需要转义:

如果您在引号分隔的字符串中,您需要能够转义引号。如果你在 xml 中,那么你需要将“内容”与“标记”分开如果你在SQL中,你需要将“命令”与“数据”分开如果你在命令行,你需要把“命令”和“数据”分开

这是一般计算的一个非常基本的方面。因为分隔数据的语法可以出现在数据中,所以需要有一种方法来区分数据和语法,因此需要转义。

在网络编程中,常见的转义情况有:1.将文本输出成HTML2.将数据输出成HTML属性3.将HTML输出成HTML4. 将数据插入 Javascript5.向SQL中插入数据6. 向 shell 命令中插入数据

如果处理不当,每个都有不同的安全隐患。这真的很重要!让我们在 PHP 的上下文中回顾一下:

  1. 将文本转换为 HTML:htmlspecialchars(...)

  2. 数据转化为HTML属性htmlspecialchars(..., ENT_QUOTES)

  3. HTML 到 HTML使用诸如 HTMLPurifier 之类的库确保只存在有效标签。

  4. 数据到 Javascript我更喜欢 json_encode。如果是放在属性中,还是需要用#2,比如

  5. 将数据插入 SQL每个驱动程序都有某种类型的 escape() 函数。这是最好的。如果您在正常的 latin1 字符集中运行,addslashes(...) 是合适的。不要忘记 addslashes() 调用周围的引号:

    “插入 table1 SET field1 = '”。添加斜线($数据)。 “'”

  6. 命令行数据escapeshellarg() 和 escapeshellcmd() -- 阅读手册

--牢记这些,您将消除 95%* 的常见网络安全风险! (* 一个猜测)

关于PHP/MySQL : Sanitizing user input - is this a bad idea?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1811796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com