Gre*_*reg 2 php mysql sanitization
我有一个"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);
}
Run Code Online (Sandbox Code Playgroud)
我还没有看到其他人使用这种方法.有什么理由不去吗?
编辑 - 修改为适用于数组:
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);
}
Run Code Online (Sandbox Code Playgroud)
我发现在使用数据时逃避数据要好得多,而不是在进行中.您可能希望在JSON,XML,Shell,MySQL,Curl或HTML中使用这些数据,并且每个数据都有自己的方式.逃避数据.
让我们快速回顾一下为什么在不同的环境中需要逃避:
如果您使用引号分隔的字符串,则需要能够转义引号.如果您使用的是xml,则需要将"内容"与"标记"分开如果您使用的是SQL,则需要将"命令"与"数据"分开如果您在命令行中,则需要将"命令"分开来自"数据"
这一般是计算的一个基本方面.因为分隔数据的语法可以在数据中出现,所以需要有一种方法来区分DATA和SYNTAX,从而逃避.
在Web编程中,常见的转义情况是:1.将文本输出到HTML 2.将数据输出到HTML属性3.将HTML输出到HTML 4.将数据插入到Javascript中5.将数据插入到SQL中6.将数据插入到shell命令中
如果处理不当,每个都有不同的安全隐患.这真的很重要!让我们在PHP的上下文中回顾一下:
文本转换为HTML:htmlspecialchars(...)
数据转换为HTML属性htmlspecialchars(...,ENT_QUOTES)
HTML转换为HTML使用HTMLPurifier等库来确保只存在有效标记.
数据到Javascript我更喜欢json_encode.如果要将其放在属性中,则仍需要使用#2,例如
将数据插入SQL每个驱动程序都有某种类型的escape()函数.这是最好的.如果您使用普通的latin1字符集运行,则addslashes(...)是合适的.不要忘记引号AROUND the addslashes()调用:
"INSERT INTO table1 SET field1 ='".addslashes($ data)."'"
命令行中的数据escapeshellarg()和escapeshellcmd() - 阅读手册
- 牢记这些,您将消除95%*的常见网络安全风险!(*一个猜测)
| 归档时间: |
|
| 查看次数: |
2998 次 |
| 最近记录: |