Php 创建消毒功能

Php 创建消毒功能,php,Php,阅读所有关于消毒的帖子让我很困惑。我正在创建一个博客类型的网站,需要清理将进入数据库(用户配置文件信息、博客帖子和评论)的用户输入,以及GET请求中的某些id和用户名,以使用查询来显示信息 这是我根据所读内容拼凑的: function escape($data) { global $conn; connect(); $data = $conn->real_escape_string($data); $conn->close(); $data =

阅读所有关于消毒的帖子让我很困惑。我正在创建一个博客类型的网站,需要清理将进入数据库(用户配置文件信息、博客帖子和评论)的用户输入,以及GET请求中的某些id和用户名,以使用查询来显示信息

这是我根据所读内容拼凑的:

function escape($data) {
    global $conn;
    connect();
    $data = $conn->real_escape_string($data);
    $conn->close();
    $data = str_replace(chr(0), '', $data);
    return $data;
}

function sanitize($data) {
  $data = trim($data);
  $data = strip_tags($data);
  $data = stripslashes($data);
  $data = escape($data);
  $data = htmlspecialchars($data);
  return $data;
}
条纹斜杠让我有点困惑。我知道PHP会自动将它们放入GET和POST请求中,而双斜杠可能是个问题。我是否应该在stripslashes之后将addslashes()放在函数中以确保它正常工作

对于所有insert和update语句,插入的值都是使用准备好的语句绑定的,但所有其他语句都没有准备好(由于各种原因,在这个项目的这个阶段,对它们执行准备好的语句是没有效率的)

我很想得到你的反馈。就像我说的,这一切都很混乱

更新:

我添加了$data=str_replace(chr(0),“”,$data);以防止空字节注入。是这样吗

顺便说一句,进入查询的唯一GET请求要么是ID号(我有一个函数可以删除除数字以外的所有内容)要么是用户名。在进行任何查询之前,我正在使用上面的转义函数来清理用户名。这够好吗

我在博客文章和个人资料信息上使用的sanitize函数,由用户提供,并通过一条准备好的语句插入到表中

函数cleanInput($input){
function cleanInput($input) {

  $search = array(
    '@<script[^>]*?>.*?</script>@si',   // Strip out javascript
    '@<[\/\!]*?[^<>]*?>@si',            // Strip out HTML tags
    '@<style[^>]*?>.*?</style>@siU',    // Strip style tags properly
    '@<![\s\S]*?--[ \t\n\r]*>@'         // Strip multi-line comments
  );

    $output = preg_replace($search, '', $input);
    return $output;
}    


function sanitize($input) {
        if (is_array($input)) {
            foreach ($input as $var => $val) {
                $output[$var] = sanitize($val);
            }
        } else {
            if (get_magic_quotes_gpc()) {
                $input = stripslashes($input);
            }
            $input = cleanInput($input);
            $output = mysql_real_escape_string($input);
        }
        return $output;
    }
$search=array( '@]*?>.@si',//去掉javascript “@@si”,//去掉HTML标记 “@]*?>.*?@siU”,//条形样式标记正确 '@@'//带多行注释 ); $output=preg_replace($search,,$input); 返回$output; } 函数清理($input){ if(is_数组($input)){ foreach($var=>$val的输入){ $output[$var]=消毒($val); } }否则{ 如果(获取\u魔术\u引号\u gpc()){ $input=条带斜杠($input); } $input=cleanInput($input); $output=mysql\u real\u escape\u字符串($input); } 返回$output; }
@Gordon我不同意。他明确提到插入和更新statements@visevo:这些不是MySQL专有的。就像SELECT一样,只需使用prepared语句将所有内容插入MYSQL。当您想向页面输出某些内容时,可以使用
htmlspecialchars($data,entu QUOTES,“UTF-8”)
并在需要将其重新插入数据库时对其进行解码。这应该可以对SQL注入提供一些保护。尽管还有其他需要注意的漏洞。(例如空字节注入,XSS,)Gordon,真正的_escape_字符串是一个mysqli函数。$conn是一个新的mysqli(在另一个函数中)。我可以理解为什么会出现混淆
cleanpoint()
指的是什么?首先,您想检查它是的,但在名为
cleanpoint()
的标准PHP库中,我没有意识到任何函数。你需要在你的答案中添加这个方法,否则它就是一个坏的解决方案。对不起,伙计,对不起,我完全忘记了