首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用PHP清理用户输入的最佳方法是什么?

使用PHP清理用户输入的最佳方法是什么?
EN

Stack Overflow用户
提问于 2018-08-31 01:41:42
回答 2查看 0关注 0票数 0

是否有一个catchall函数适用于清理SQL注入和XSS攻击的用户输入,同时仍允许某些类型的html标记?

EN

回答 2

Stack Overflow用户

发布于 2018-08-31 09:46:19

这是一种常见的误解,即用户输入可以被过滤。PHP甚至有一个(现已弃用的)“功能”,称为魔术引号,它建立在这个想法的基础之上。这是无稽之谈。忘记过滤(或清洁,或任何人称之为)。

为了避免出现问题,你应该做的很简单:每当你在国外代码中嵌入一个字符串时,你必须根据该语言的规则来逃避它。例如,如果在某些SQL目标MySql中嵌入一个字符串,则必须为此目的使用MySql函数转义该字符串(mysqli_real_escape_string)。(或者,对于数据库,如果可能,使用预准备语句是更好的方法)

另一个例子是HTML:如果在HTML标记中嵌入字符串,则必须使用它进行转义htmlspecialchars。这意味着每个单词echoprint语句都应该使用htmlspecialchars

第三个例子可能是shell命令:如果你要将字符串(例如参数)嵌入到外部命令中,并用它们调用它们exec,那么你必须使用escapeshellcmdescapeshellarg

等等等等 ...

您需要主动过滤数据的唯一情况是,您是否接受预先格式化的输入。例如。如果您允许用户发布HTML标记,那么您计划在网站上显示。但是,你应该不惜一切代价避免这种情况,因为无论你如何过滤它,它都将是一个潜在的安全漏洞。

票数 0
EN

Stack Overflow用户

发布于 2018-08-31 10:49:39

不可以。如果没有任何上下文,您无法对数据进行一般过滤。有时您希望将SQL查询作为输入,有时您希望将HTML作为输入。

您需要过滤白名单上的输入 - 确保数据符合您期望的某些规范。然后,您需要在使用它之前将其转义,具体取决于您使用它的上下文。

转义SQL数据的过程 - 防止SQL注入 - 与转换(X)HTML数据的过程非常不同,以防止XSS。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100000703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档