php - 终极清洁/安全功能

标签 php security xss sql-injection

我有很多来自 $_GET$_POST 的用户输入...目前我总是写 mysql_real_escape_string($_GET['var' ])..

我想知道您是否可以立即创建一个保护、转义和清理 $_GET/$_POST 数组的函数,这样您就不会拥有每次处理用户输入等时都要处理它。

我在想一个函数,例如 cleanMe($input),在里面应该做 mysql_real_escape_string, htmlspecialchars, strip_tags, stripslashes (我认为这就是让它干净和安全的全部)然后返回 $input

那么这可能吗?制作一个适用于所有 $_GET$_POST 的函数,所以你只需要这样做:

$_GET  = cleanMe($_GET);
$_POST = cleanMe($_POST);

因此,稍后在您的代码中,当您使用例如 $_GET['blabla']$_POST['haha'] 时,它们会受到保护、剥离和等等?

试了一下自己:

function cleanMe($input) {
   $input = mysql_real_escape_string($input);
   $input = htmlspecialchars($input, ENT_IGNORE, 'utf-8');
   $input = strip_tags($input);
   $input = stripslashes($input);
   return $input;
}

最佳答案

通用卫生功能的想法是一个错误的概念。

一种适合各种用途的正确卫生方法。在字符串上不加选择地运行它们通常会破坏它 - 为 SQL 查询转义一段 HTML 代码会破坏它以在网页中使用,反之亦然。应使用数据之前应用卫生设施:

  • 在运行数据库查询之前。正确的卫生方法取决于您使用的图书馆;它们列于 How can I prevent SQL injection in PHP?

  • htmlspecialchars() 用于安全的 HTML 输出

  • preg_quote() 用于正则表达式

  • escapeshellarg()/escapeshellcmd() 用于外部命令

  • 等等。等等。

使用“一刀切”的卫生功能就像在植物上使用五种剧毒杀虫剂,根据定义,这种杀虫剂只能含有一种 bug - 只是发现你的植物被第六种虫害,任何杀虫剂都不起作用。

始终使用一种正确的方法,最好是在将数据传递给函数之前直接使用。 除非需要,否则不要混合方法。

关于php - 终极清洁/安全功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4223980/

相关文章:

javascript - 无法在我的网站上重现 XSS?

javascript - 防止站点范围内的 XSS 攻击

mongodb - Mongo 3.2 SCRAM-SHA-1 身份验证问题

javascript - 如何在我自己的浏览器上停用跨站脚本防御?

php - 将对象传递给包含文件 oop php

php - Laravel 错误 '; expected' 和 'Unexpected Unknown' 437 次

java - 为什么在 Spring Security 的 hasPermission 检查中使用 "#post"而不是 "post"

ios - 如何确保iOS应用程序的完整性?

javascript - 隐藏 iFrame 源

php - Facebook 请求 2.0,如何将 "Accept"按钮 url 更改为 facebook 之外的 url?