PHP和mySQL:什么时候使用htmlentities?
平台:PHP & mySQL
出于我的实验目的,我自己在自己的网站上尝试了一些XSS注射。考虑这种情况,其中我有我的表单文本区域输入。由于这是一个文本区域,因此我能够输入文本和各种(英语)字符。以下是我的观察:
如果我只应用strip_tags和mysql_real_escape_string,并且在将数据插入数据库之前没有在我的输入中使用 htmlentities,则查询将中断,并且由于异常终止,我会遇到显示表结构的错误。
如果我在将数据插入数据库之前对输入应用strip_tags,mysql_real_escape_string和htmlentities,则查询不会中断,并且我能够成功地将数据从文本区域插入到我的数据库中。
因此,我确实理解必须不惜一切代价使用 htmentities,但不确定何时应该使用它。考虑到上述情况,我想知道:
什么时候应该使用htmlentities?它应该在将数据插入数据库之前使用,还是以某种方式将数据放入数据库,然后在我试图显示数据库中的数据时应用htmlentities?
如果我遵循上述B点中描述的方法(我认为这是在我的情况下最明显和最有效的解决方案),那么当我尝试显示数据库中的数据时,我是否仍然需要应用htmlentities?如果是,为什么?如果没有,为什么不呢?我问这个是因为在我浏览了帖子之后,这对我来说真的很困惑:http://shiflett.org/blog/2005/dec/google-xss-example
然后还有一个PHP函数叫做:html_entity_decode。我可以使用它来显示我的数据库数据(按照B点中指示的过程进行操作后)当我的输入应用了htmlentities时吗?我应该从哪一个中选择:html_entity_decode和htmlentities以及何时?
预览页面:
我认为在这里添加一些特定情况的更具体的细节可能会有所帮助。考虑有一个“预览”页面。现在,当我从文本区域提交输入时,预览页面接收输入并显示 html,同时,隐藏的输入会收集此输入。当点击“预览”按钮上的提交按钮时,隐藏输入中的数据将 POST 到新页面,该页面将隐藏输入中包含的数据插入到数据库中。如果我在表单最初提交时不应用 htmlentities(但只应用strip_tags和mysql_real_escape_string),并且文本区域中存在恶意输入,则隐藏输入将被破坏,隐藏输入的最后几个字符在页面上明显可见,这是不希望的。因此,牢记这一点,我需要采取一些措施来在“预览”页面上正确保存隐藏输入的完整性,同时收集隐藏输入中的数据,以免破坏它。我该怎么做?对于延迟发布此信息,我们深表歉意。" />
提前感谢您。