Php 处理用户输入以安全地将其存储在数据库中,并像cms一样将其拉出

Php 处理用户输入以安全地将其存储在数据库中,并像cms一样将其拉出,php,mysql,xss,sql-injection,Php,Mysql,Xss,Sql Injection,我通过制作cms学习php,到目前为止一切都很顺利。接下来我要实现的是用户输入,更具体地说,我希望他们能够编写自己的帖子、问题,。。在网站上,就像你可以在几乎每个论坛上 现在问题来了,我读过多篇文章说,在允许用户输入时必须小心,因为它们可以执行sql注入和xss注入之类的操作。虽然我找到了很多关于这方面的文章,但我没有找到任何像样的教程/指南来解决这个问题 我深入研究了一下,发现可以使用PHPPDO prepare语句保护sql免受注入。问题#1解决了 现在进入问题2:xss注入。我读过你必须使

我通过制作cms学习php,到目前为止一切都很顺利。接下来我要实现的是用户输入,更具体地说,我希望他们能够编写自己的帖子、问题,。。在网站上,就像你可以在几乎每个论坛上

现在问题来了,我读过多篇文章说,在允许用户输入时必须小心,因为它们可以执行sql注入和xss注入之类的操作。虽然我找到了很多关于这方面的文章,但我没有找到任何像样的教程/指南来解决这个问题

我深入研究了一下,发现可以使用PHPPDO prepare语句保护sql免受注入。问题#1解决了

现在进入问题2:xss注入。我读过你必须使用htmlspecialchars之类的函数,但他们从未说过何时使用它们。(在将其插入数据库或从数据库中取出之前)我也读过关于HTML净化器的内容,但它删除了所有js,因此您不能允许用户发布代码示例,我真的需要

如果您知道我如何解决整个输入安全问题,请在下面发表评论/回答。这是非常需要和赞赏


注意:如果有任何问题,用户可以在markdown中输入他们的帖子,我已经可以用php将其转换为html。

至于处理XSS,这通常是在数据从数据库中取出后处理的。与其使用另一个库,不如在这里查看如何对输出进行sanatizing

特别是,过滤、消毒、特殊字符

我还建议,如果您试图学习如何处理安全性,您也应该检查一下如何保护自己免受XSRF攻击。下面是一篇关于XSRF是什么以及如何防范它的好文章:


祝你好运!为你先做你自己的研究提供道具

至于处理XSS,这通常是在数据从数据库中取出后处理的。与其使用另一个库,不如在这里查看如何对输出进行sanatizing

特别是,过滤、消毒、特殊字符

我还建议,如果您试图学习如何处理安全性,您也应该检查一下如何保护自己免受XSRF攻击。下面是一篇关于XSRF是什么以及如何防范它的好文章:


祝你好运!为你先做你自己的研究提供道具

感谢XSRF预防技巧,我一定要实现它!但是XSS部分还不完全清楚。。。例如:就性能而言,清理输入并将其存储到数据库中的速度不是比清理数据库中的每个请求请求更快吗?在大多数情况下,性能差异非常小。许多框架(如Python的Django)会自动清理每个请求的输出。我认为这种想法是这样的,将来如果你想以不同的方式处理卫生设施,或者你想让用户自由输入基本的HTML(比如加粗他们自己的文本而不必使用BBCode),那将破坏数据库中已经存在的数据,因为你已经修改了它。如果你在请求的时候这样做,那么你就可以自由地改变事情。是的,我不希望他们能够输入基本的html。我已经配置了MarkItUp,这样不知道html的用户可以在markdown中输入(主要是单击按钮)。问题是,一旦他们在代码块中输入了一些代码,比如一些javascript HTMLPurifier就会把所有这些都扔掉,留下空的
标记。。。现在,我将所有内容都存储在数据库中,不进行任何转换,如果用户不想编辑它,我会在文本输入中使用htmlspecialchars()进行回显吗?感谢XSRF预防技巧,我肯定会实现它!但是XSS部分还不完全清楚。。。例如:就性能而言,清理输入并将其存储到数据库中的速度不是比清理数据库中的每个请求请求更快吗?在大多数情况下,性能差异非常小。许多框架(如Python的Django)会自动清理每个请求的输出。我认为这种想法是这样的,将来如果你想以不同的方式处理卫生设施,或者你想让用户自由输入基本的HTML(比如加粗他们自己的文本而不必使用BBCode),那将破坏数据库中已经存在的数据,因为你已经修改了它。如果你在请求的时候这样做,那么你就可以自由地改变事情。是的,我不希望他们能够输入基本的html。我已经配置了MarkItUp,这样不知道html的用户可以在markdown中输入(主要是单击按钮)。问题是,一旦他们在代码块中输入了一些代码,比如一些javascript HTMLPurifier就会把所有这些都扔掉,留下空的
标记。。。现在,我将所有内容都存储在数据库中,不进行任何转换,如果用户不想编辑它,我是否会在文本输入中使用htmlspecialchars()对其进行回显?