- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个“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 的上下文中回顾一下:
将文本转换为 HTML:htmlspecialchars(...)
数据转化为HTML属性htmlspecialchars(..., ENT_QUOTES)
HTML 到 HTML使用诸如 HTMLPurifier 之类的库确保只存在有效标签。
数据到 Javascript我更喜欢 json_encode
。如果是放在属性中,还是需要用#2,比如
将数据插入 SQL每个驱动程序都有某种类型的 escape() 函数。这是最好的。如果您在正常的 latin1 字符集中运行,addslashes(...) 是合适的。不要忘记 addslashes() 调用周围的引号:
“插入 table1 SET field1 = '”。添加斜线($数据)。 “'”
命令行数据escapeshellarg() 和 escapeshellcmd() -- 阅读手册
--牢记这些,您将消除 95%* 的常见网络安全风险! (* 一个猜测)
关于PHP/MySQL : Sanitizing user input - is this a bad idea?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1811796/
我是一名优秀的程序员,十分优秀!