如何使用PHP清理用户输入?
作者:互联网
是否有一个catchall函数适用于清理SQL注入和XSS攻击的用户输入,同时仍然允许某些类型的HTML标记?
解决方法:
这是一种常见的误解,即用户输入可以被过滤. PHP甚至有一个(现已弃用的)“功能”,称为magic-quotes,它基于这个想法.这是胡说八道.忘记过滤(或清洁,或任何人称之为).
为了避免出现问题,你应该做的很简单:每当你在外国代码中嵌入一个字符串时,你必须根据该语言的规则来逃避它.例如,如果在某些针对MySQL的SQL中嵌入字符串,则必须使用MySQL的函数来转义字符串(mysqli_real_escape_string). (或者,对于数据库,如果可能,使用预准备语句是更好的方法.)
另一个例子是HTML:如果在HTML标记中嵌入字符串,则必须使用htmlspecialchars
将其转义.这意味着每个echo或print语句都应使用htmlspecialchars.
第三个例子可能是shell命令:如果要将字符串(例如参数)嵌入到外部命令中,并使用exec
调用它们,则必须使用escapeshellcmd
和escapeshellarg
.
等等等等 …
您需要主动过滤数据的唯一情况是,您是否接受预先格式化的输入.例如,如果您让用户发布HTML标记,那么您计划在网站上显示该标记.但是,你应该不惜一切代价避免这种情况,因为无论你如何过滤它,它总是一个潜在的安全漏洞.
标签:php,security,user-input,sql-injection,xss 来源: https://codeday.me/bug/20190910/1802135.html