
xss函数用途$str2 str_replace(, , $str); // 删除所有 $str3 str_replace(, , $str2); // 删除所有 str_replace()移除用户输入中的所有和字符$str2 str_replace(script, scr_ipt, $str);$str3 str_replace(on, o_n, $str2);str_replace():str_replace()是全局替换会替换所有匹配的字符串 过滤script标签 过滤事件处理器中的onecho h2 aligncenter没有找到和.htmlspecialchars($str).相关的结果./h2htmlspecialchars():对原始输入$str进行HTML实体编码后输出到h2标签if(false strpos($str7, http://));strpos():检查$str7中是否包含http://查找字符串中某子串第一次出现的位置setcookie(user, call me maybe?, time()3600);setcookie():设置名为user的Cookie值为call me maybe?有效期为1小时$str11 $_COOKIE[user];$_COOKIE:获取名为user的Cookie值文件上传函数用途if (isset($_POST[submit])) {**isset()**检查表单是否通过POST方式提交if (file_exists(UPLOAD_PATH)) {**file_exists()**检查文件或目录是否存在$temp_file $_FILES[upload_file][tmp_name];获取临时文件路径if (($_FILES[upload_file][type] image/jpeg) ||($_FILES[upload_file][type] image/png) ||($_FILES[upload_file][type] image/gif)) {**$_FILESIO()**检查上传文件的 MIME 类型是否为图片格式$img_path UPLOAD_PATH . / . $_FILES[upload_file][name];获取原始文件名if (move_uploaded_file($temp_file, $img_path)) {$is_upload true;} else {$msg 上传出错;}**move_uploaded_file():**将临时文件$temp_file移动到目标路径$img_path$file_name trim($_FILES[upload_file][name]);**trim():**去除文件名首尾的空白字符$file_name deldot($file_name);**deldot():**删除文件名末尾的点号$file_ext strrchr($file_name, .);**strrchr():**提取文件扩展名包括点号从最后一个点号开始截取处理文件名中有多个点的情况$file_ext strtolower($file_ext);**strtolower()**将扩展名统一转为小写 防止大小写绕过$file_ext str_ireplace(::$DATA, , $file_ext);**str_ireplace():**去除扩展名中的::$DATA字符串if(!in_array($file_ext, $deny_ext)) {**in_array():**检查某个值是否在数组中存在检查文件扩展名是否在黑名单中$img_path UPLOAD_PATH./.date(YmdHis).rand(1000,9999).$file_ext;**date():**生成带时间戳的文件名$file fopen($filename, rb);**fopen():**以二进制只读方式打开上传的临时文件$bin fread($file, 2);**fread():**从文件开头读取2个字节16位的二进制数据fclose($file);**fclose():**关闭之前打开的文件释放系统资源$strInfo unpack(C2chars, $bin);**unpack():**将2字节的二进制数据解包为2个无符号字符$typeCode intval($strInfo[chars1].$strInfo[chars2]);**intva():**获取变量的整数值将两个字节的值拼接为整数if(stripos($types, $ext) 0){**stripos():**检查文件扩展名是否在允许的类型列表中$info getimagesize($filename);**getimagesize():**获取图像文件的大小、类型等信息一个安全的文件上传功能就像机场安检需要一步步检查不能跳过任何环节。flowchart TD A[开始上传] -- B{表单提交检查brisset($_POST[submit])} B -- 未提交 -- Z[结束] B -- 已提交 -- C{目录存在检查brfile_exists} C -- 否 -- Z C -- 是 -- D{文件类型检查br检查 MIME 或扩展名} D -- 不通过 -- Z D -- 通过 -- E[读取临时文件br$_FILES[tmp_name]] E -- F{文件内容头验证br读取二进制头, getimagesize} F -- 不通过 -- Z F -- 通过 -- G[生成安全文件名brdate 随机数] G -- H[移动文件到目标目录brmove_uploaded_file] H -- I[上传成功]发起与检查安检入口isset($_POST[submit])确认用户是按了“提交”按钮而不是直接访问URL。file_exists()确保我们的“仓库”上传目录是存在的。客户端初步过滤第一道闸门$_FILES[upload_file][type]in_array()检查浏览器声称的文件类型MIME是不是图片。注意这个很容易伪造只是第一道简单过滤。服务端深度验证核心扫描$temp_file $_FILES[upload_file][tmp_name]拿到文件在服务器上的临时存放路径。fopen(),fread(),unpack(),getimagesize()这是关键它们直接读取文件的二进制内容验证它是不是真正的图片防止攻击者伪造文件头。strrchr(),strtolower(),str_ireplace(),in_array()处理文件名提取并检查扩展名如.jpg转小写并移除::$DATA这类特殊字符防止绕过。安全存储与完成入库登记trim(),deldot()清理文件名。date()rand()最佳实践不使用用户提供的原始文件名而是自己生成一个“新名字”如时间戳随机数避免文件名冲突和恶意利用。move_uploaded_file()将临时文件正式移动到我们指定的安全目录。