Php 需要从用户提交的数据中筛选哪些文本?
我正在尝试组合一些PHP验证函数,以筛选用户提交的表单数据中的任何字符或字符串,这将是潜在的安全风险。我已经采取了我知道的步骤,如下所列,但我希望确保我没有忽视任何事情 用户提供的数据过滤如下:Php 需要从用户提交的数据中筛选哪些文本?,php,mysql,forms,input,filter,Php,Mysql,Forms,Input,Filter,我正在尝试组合一些PHP验证函数,以筛选用户提交的表单数据中的任何字符或字符串,这将是潜在的安全风险。我已经采取了我知道的步骤,如下所列,但我希望确保我没有忽视任何事情 用户提供的数据过滤如下: 对于整数,我检查ctype_digit()是真还是假 对于其他可能包含小数的数字,我使用is_numeric() 对于电子邮件,我使用filter\u var()和filter\u VALIDATE\u EMAIL 对于IP地址,我使用filter\u var()和filter\u VALIDATE\
- 对于整数,我检查ctype_digit()是真还是假
- 对于其他可能包含小数的数字,我使用is_numeric()
- 对于电子邮件,我使用filter\u var()和filter\u VALIDATE\u EMAIL
- 对于IP地址,我使用filter\u var()和filter\u VALIDATE\u IP
- 对于URL,我使用filter\u var()和filter\u VALIDATE\u URL
- 对于HTML代码,我使用strip_标记(),同时允许:p、a、b、br、font、h1、h2、h3、h4、h5、h6、I、li、ol、span、ul、strong、div、img、article、section、header、footer、side、details、figcaption、figure、main、mark、nav、summary、time、pre、hr、style、svg、path
- 对于RGBA,我使用filter_var()和filter_VALIDATE_REGEXP以及以下正则表达式:'/^([0-9]|[1-9][0-9]| 1[0-9][0-9]| 2[0-4][0-9]| 25[0-5]),{3}(0[0-9]+)?| 1.0+$/'
- 为了验证时间戳,我检查它是否为整数,如果是,则将其传递给date()。如果它不是整数,我看DateTime::createFromFormat()是否可以解释它
标题
某些段落文本……可以包括:标点符号(甚至括号)!$rgx='[a-zA-Z0-9!#%&:;=@~"\'\/\\\^\*\-\_\.\?\+\(\)\$\s]';
if(!filter_var($val,FILTER_VALIDATE_REGEXP,array('options'=>array('regexp'=>'/^'.$rgx.'+$/'))))
{
return'Error! May not contain '.implode(' ',array_unique(str_split(preg_replace('/'.$rgx.'/','',$val))));
}
对于您要查找的内容,没有“通用筛选/验证方法”。您必须始终在使用数据的特定上下文中验证和转义数据
重要提示:不要使用筛选,而是使用显式验证和白名单
示例:
- 您将数据输入数据库,使用(正如您已经做的那样)准备好的语句(这是最好的…好吧,或者至少转义它们)
- 再次将用户输入输出为HTML输出,请使用
(防止XSS攻击)htmlentites()
- 调用shell命令(例如,用于压缩图像或处理特定的csv文件),然后使用
和escapeshellcmd()
等escapeshellarg()
- 如果要验证电子邮件地址是否正确,请不要编写自己的正则表达式,而是使用现有的验证类。 等等
- 您将数据输入数据库,使用(正如您已经做的那样)准备好的语句(这是最好的…好吧,或者至少转义它们)
- 再次将用户输入输出为HTML输出,请使用
(防止XSS攻击)htmlentites()
- 调用shell命令(例如,用于压缩图像或处理特定的csv文件),然后使用
和escapeshellcmd()
等escapeshellarg()
- 如果要验证电子邮件地址是否正确,请不要编写自己的正则表达式,而是使用现有的验证类。 等等