我知道htmlentities()和strip_tags()以及htmlspecialchars()和@R_502_198@_real_escape_string(),甚至javascript的escape()但我不知道使用哪个和哪里.
处理这三种不同类型输入的最安全方法是什么(通过进程,我的意思是获取,保存在数据库中,并显示):
>帖子的标题(也将是URL永久链接的基础).
>论坛帖子的内容仅限于基本文本输入.
>允许html的论坛帖子的内容.
我希望得到一个答案,告诉我有多少这些逃逸功能需要组合使用以及为什么.
谢谢!
htmlspecialchars()
:它将转义< ;,>,“,’和& – 取决于您提供的选项.
如果用户输入了一些标签,strip_tags将删除标签 – 而且您通常不希望用户键入的内容只是消失;-)
至少,不是“内容”字段:-)
一旦您获得了用户在表单中输入的内容(即表单已提交),您需要在将其发送到数据库之前将其转义.
这就是@R_502_198@i_real_escape_string之类的函数变得有用的地方:它们为sql转义数据
您可能还想查看准备好的语句,这可能对您有所帮助;-)
with mysqli – 和with PDO
你不应该使用像addslashes这样的东西:它的转义不依赖于数据库引擎;使用适合您正在使用的引擎(@R_502_198@,PostGresql,…)的函数更好/更安全:它将准确知道要逃脱的内容以及如何逃脱.
>对于不能包含HTML的字段,您应该使用htmlspecialchars()
:如果用户输入了HTML标记,那些将按原样显示,而不是作为HTML注入.
>对于可以包含HTML的字段……这有点棘手:你可能只想要允许一些标签,而strip_tags
(可以做到这一点)并不是真正取决于任务(它会让允许的属性)标签)
>您可能想看看一个名为HTMLPUrifier的工具:它将允许您指定应该允许哪些标记和属性 – 并且它生成有效的HTML,这总是很好^^
>这可能需要一些时间来计算,并且您可能不希望每次都必须重新生成该HTML;所以你可以考虑将它存储在数据库中(或者只保留干净的HTML,或者将它和非干净的HTML保存在两个单独的字段中 – 可能对于允许人们编辑帖子有用吗?)
这些只是一些指示……希望他们帮助你:-)不要犹豫,问你是否有更准确的问题!