<?php //========== 转义 ==========// $str = "Is your name O'Reilly?"; echo addslashes($str) . PHP_EOL; // Is your name O\'Reilly? // addslashes()会在如下字符之前添加反斜线: // -------------------------------------------------- // 单引号(') // 双引号(") // 反斜线(\) // NUL(NUL 字节) //========== 反转义 ==========// $str = "Is your name O\'Reilly?"; echo stripslashes($str) . PHP_EOL; // Is your name O'Reilly? //========== 特殊字符转HTML实体 ==========// $str = '<a href="#" target=\'_blank\'>Test</a>'; $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401; echo htmlspecialchars($str, $flags) . PHP_EOL; // <a href="#" target='_blank'>Test</a> //========== HTML实体转特殊字符 ==========// $str = '<a href="#" target='_blank'>Test</a>'; $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401; echo htmlspecialchars_decode($str, $flags) . PHP_EOL; // <a href="#" target='_blank'>Test</a> //========== 有效的flags常量 ==========// // ENT_COMPAT 会转换双引号,不转换单引号。 // ENT_QUOTES 既转换双引号也转换单引号。 // ENT_NOQUOTES 单/双引号都不转换 // ENT_IGNORE 静默丢弃无效的代码单元序列,而不是返回空字符串。不建议使用此标记,因为它可能有安全影响。 // ENT_SUBSTITUTE 替换无效的代码单元序列为Unicode代替符(Replacement Character),U+FFFD (UTF-8)或�(其他), // 而不是返回空字符串。 // ENT_DISALLOWED 为文档的无效代码点替换为 Unicode 代替符(Replacement Character):U+FFFD (UTF-8),或�(其他), // 而不是把它们留在原处。比如以下情况下就很有用:要保证XML文档嵌入额外内容时格式合法。 // ENT_HTML401 以HTML4.01处理代码。 // ENT_XML1 以XML1处理代码。 // ENT_XHTML 以XHTML处理代码。 // ENT_HTML5 以HTML5处理代码。 //========== 总结 ==========// // 1、addslashes()主要是防SQL注入攻击, htmlspecialchars()主要是防XSS攻击。 // 2、如果使用用户输入数据来拼接SQL,那么务必对用户输入数据进行addslashes处理,以防出现SQL注入漏洞。强烈建议不要拼接SQL然后执行, // 而是通过预处理(绑定参数)的方式执行SQL,这是防SQL注入攻击最有效的方式。 // 3、在页面上输出用户输入数据时,务必对用户输入数据进行htmlspecialchars处理,避免数据包含恶意代码且被执行。
Copyright © 2024 码农人生. All Rights Reserved