输出用户输入时,您是否只使用htmlspecialchars()
或是否还有运行的功能/操作/方法?我正在寻找能够处理XSS的东西.
我想知道我是否应该编写一个在输出时转义用户输入或只是使用的函数htmlspecialchars()
.我正在寻找通用案例,而不是可以单独处理的具体案例.
我经常使用
htmlspecialchars($var, ENT_QUOTES)
在输入字段上.我创建了一个方法来执行此操作,因为我使用了很多,它使代码更短,更可读.
让我们快速回顾一下为什么在不同的环境中需要逃避:
如果您使用引号分隔的字符串,则需要能够转义引号.如果您使用的是xml,则需要将"内容"与"标记"分开如果您使用的是SQL,则需要将"命令"与"数据"分开如果您在命令行中,则需要将"命令"分开来自"数据"
这一般是计算的一个基本方面.因为分隔数据的语法可以在数据中出现,所以需要有一种方法来区分DATA和SYNTAX,从而逃避.
在Web编程中,常见的转义情况是:1.将文本输出到HTML 2.将数据输出到HTML属性3.将HTML输出到HTML 4.将数据插入到Javascript中5.将数据插入到SQL中6.将数据插入到shell命令中
如果处理不当,每个都有不同的安全隐患.这真的很重要!让我们在PHP的上下文中回顾一下:
文本转换为HTML:htmlspecialchars(...)
数据转换为HTML属性htmlspecialchars(...,ENT_QUOTES)
HTML转换为HTML使用HTMLPurifier等库来确保只存在有效标记.
数据到Javascript我更喜欢json_encode
.如果要将其放在属性中,则仍需要使用#2,例如
将数据插入SQL每个驱动程序都有某种类型的escape()函数.这是最好的.如果您使用普通的latin1字符集运行,则addslashes(...)是合适的.不要忘记引号AROUND the addslashes()调用:
"INSERT INTO table1 SET field1 ='".addslashes($ data)."'"
命令行中的数据escapeshellarg()和escapeshellcmd() - 阅读手册
- 牢记这些,您将消除95%*的常见网络安全风险!(*一个猜测)