首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP + MYsql新的安全实践

PHP + MYsql新的安全实践
EN

Stack Overflow用户
提问于 2012-04-16 14:58:29
回答 3查看 96关注 0票数 1

我在每次提交中过滤来自用户的输入,或者我有一个创建函数,该函数操作get/post值并在每次提交表单时调用它。

但现在我在main include文件中保留了以下函数:

代码语言:javascript
复制
foreach ($_POST as $key => $value) {
    $_POST[$key] = mysql_real_escape_string(trim($value));
}

foreach ($_GET as $key => $value) {
    $_GET[$key] = mysql_real_escape_string(trim($value));
}

它工作得很好,但是对每个post/get都这样做有什么缺点吗?附言:好的,除了剧本的表演。

EN

回答 3

Stack Overflow用户

发布于 2012-04-16 15:10:12

  1. 首先验证用户输入,而不是首先转义。在验证之后和插入到数据库之前,您可以转义。
  2. 对您的问题的回答是:以正确的方式使用函数,并将这些函数放在单独的文件中,并在调用函数之前包含该文件。第一种方法也不错,但是如果表单和它的字段很大,那么脚本就会变得杂乱无章,其他开发人员很难维护,因此在任何情况下,使用包含过滤函数的文件的第二种方法都是一个好主意……
票数 0
EN

Stack Overflow用户

发布于 2012-04-16 15:11:18

这不是解决这个问题的合理方法。如前所述,这不会处理多维数组,如果突然需要处理原始值,这将是一件麻烦的事情。例如,有人可能想要保存一个文本区字段,并希望在底部留出几行,以便以后继续工作。这些行将在保存时消失。

表单验证可能也会变得有点混乱。

您的解决方案也不是100%安全的方法。你还是可以对抗XXS的。

除此之外,我知道没有一个框架会自动完成这项工作,而且他们可能不会这样做是有原因的。

票数 0
EN

Stack Overflow用户

发布于 2012-04-16 15:19:56

mysql_real_escape_string不能完全阻止SQL注入。让我们看下面的例子:

代码语言:javascript
复制
$input = mysql_real_escape_string($_POST['id']);
$query = "DELETE FROM user WHERE id={$input};";

假设$_POST['id']等于1 OR TRUE

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10169854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档