Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php HTML允许输入的数据过滤、卫生和验证_Php_Html_Security_Validation_Pdo - Fatal编程技术网

Php HTML允许输入的数据过滤、卫生和验证

Php HTML允许输入的数据过滤、卫生和验证,php,html,security,validation,pdo,Php,Html,Security,Validation,Pdo,我发现了很多关于清理、过滤和验证表单的信息,比如电子邮件、电话号码、地址等 但你的应用程序的安全性只和你最薄弱的环节一样强。如果您的表单还包含一个大的文本区域,比如说,您希望您的用户能够编写灵活的、html可读的条目,该怎么办 例如,StackOverflow上的文本区域允许您在提问或提交答案时格式化文本,包括链接、图片等。堆栈溢出接收用户的输入,将其放入数据库,然后在web上显示:图片、链接等。这意味着它们必须允许html标记、特殊字符等。他们如何以及我如何确保我的数据库中没有恶意内容 具体来

我发现了很多关于清理、过滤和验证表单的信息,比如电子邮件、电话号码、地址等

但你的应用程序的安全性只和你最薄弱的环节一样强。如果您的表单还包含一个大的文本区域,比如说,您希望您的用户能够编写灵活的、html可读的条目,该怎么办

例如,StackOverflow上的文本区域允许您在提问或提交答案时格式化文本,包括链接、图片等。堆栈溢出接收用户的输入,将其放入数据库,然后在web上显示:图片、链接等。这意味着它们必须允许html标记、特殊字符等。他们如何以及我如何确保我的数据库中没有恶意内容

具体来说,以下是我添加到web应用程序中的安全实现:

  • PDO在处理动态数据库输入时准备的语句
  • 将我的生产站点的数据库访问权限限制为权限较低的用户(因此,如果有人获得控制权,他们将只能更新、插入或选择)
  • 客户端验证(在这种情况下非常无用,只是为了方便用户)
  • 使用POST,而不是GET
  • 已关闭错误显示,因此恶意用户无法探测
  • 我知道最佳实践是使用服务器端验证筛选和验证POST[],但这样做会限制我的用户可以提交的内容。例如,过滤掉所有html标记将禁用链接、图像和格式。使用htmlentities进行输出过滤时也存在同样的问题。也许有一种更微妙的方法可以做到这一点

    我还能做些什么来确保这一点

    我应该补充一点:在显示任何输出之前,都会有一个调节过程。每个用户条目在被允许放在网站上之前都会有一双眼睛看着它。这需要考虑输出过滤,但输入过滤仍然是一个问题

    PDO在处理动态数据库输入时准备的语句

    将我的生产站点的数据库访问权限限制为权限较低的用户(因此,如果有人获得控制权,他们将只能更新、插入或选择)

    无用的

    客户端验证(在这种情况下非常无用,只是为了方便用户)

    无用的

    使用POST,而不是GET

    无关的

    已关闭错误显示,因此恶意用户无法探测


    列表中没有关于HTML问题的项目。如果你想允许格式化输入,你必须使用BB代码或HTML净化器或类似的东西。

    也许你会问你的问题?但是,问题标题有误导性。处理大输入和小输入没有区别。所有这些都必须进行相同的处理。唯一的区别是允许使用HTML,但它没有反映在标题中。我编辑了标题以反映这一点,并添加了HTML标记。我已经查看了HTML净化器。它看起来是一个很好的解决方案,可以在输入到达我的数据库之前清理它们(比BB代码好得多)。