我在方法调用、SQL查询和文件调用中使用$_GET、$_POST和$_COOKIE变量--为了更好的安全性(避免注入攻击等),有必要转义/重写该用户数据。你怎么推荐这件事?
从内置的逃逸功能.为了让果汁流动:
\x00, \n, \r, \, ', "和\x1a中,以确保字符串对SQL查询的安全性--如mysql_real_escape_string()所示。[a-zA-Z0-9 _-\.] (其中"\.“是转义的”.-dot“)。非常感谢您的投入。谢谢。
发布于 2009-09-25 04:58:08
由于转义也取决于您要发送数据的系统,我的建议是使用PHP提供的函数,为每个系统专门创建。
例如:
mysql_real_escape_string、mysqli_real_escape_string或PDO::quote
htmlspecialchars或htmlentities实体。不管怎样:不要再发明轮子了!
有许多类型的输出已经存在的转义函数/方法:使用这些函数/方法!
发布于 2009-09-25 05:56:00
还请注意,您必须转义的东西(如果用户输入)是图像位置等。
如果某个人热链接到图像(例如,化身),则如下所示
http://yoursite.com/admin/user/delete/1
然后您的视图中的代码是
<img class="avatar" alt="<?php echo $userName; ?>" src="<?php $avatarUrl; ?>" />如果您以管理员身份登录,那么您可能会意外地删除用户。当然,希望这种删除可以通过post来完成,但仍然可以避免。
在这种情况下,htmlspecialchars()帮不上忙。
通过强制使用post的所有数据更改方法,攻击者可能会变得更加困难;通过为每个delete操作生成一个令牌,并在删除之前对其进行验证,几乎是不可能的。
发布于 2009-09-25 08:17:45
我就是这样用的:
function escape($sql) {
// Stripslashes
if (get_magic_quotes_gpc()) {
$sql = stripslashes($sql);
}
//if this is the intedger
if (!is_int($sql) || $sql == '0') {
$sql = "'" . mysql_real_escape_string($sql) . "'";
}
return $sql;
}在MySQL查询中
mysql_query("SELECT SQL_CACHE * FROM `page` WHERE `id` = ".escape($_GET['id'])." LIMIT 1");https://stackoverflow.com/questions/1475489
复制相似问题