困惑于html编码

时间:2017-07-11 22:13:36

标签: php html-encode

我对字符编码感到困惑。

我理解人们以不同的方式做事,但许多人建议您在输入时将输入存储在数据库中,然后在根据您计划使用的内容阅读时将其处理。这对我来说很有意义。

因此,如果用户输入撇号,双引号或&符号,小于,大于符号,则这些将在我的数据库中写入' " &安培; < >分别

现在,使用php读取数据,我通过HTMLPurify运行文本以捕获任何注入问题。

我还应该htmlencode吗?如果我不这样做,那么一切都显示正常(在Chrome和Firefox中),但我不确定这是否正确,是否会在其他浏览器中正常显示?

如果我使用ENT_QUOTES和htmlspecialchars的htmlentities,我开始获取这些字符的代码,我相信如果查看页面源我应该看到的,但不是用户看到的页面。

问题是,如果没有进行编码,我会看到我想要看到的内容,但我脑子里有这样的傻笑,我没有正确地做到这一点!

1 个答案:

答案 0 :(得分:1)

你有这个困惑。字符编码是您的系统的属性。您的网站和数据库负责字符编码。

你必须决定接受什么。我会说,一般来说,网络已经转向UTF-8的标准化。因此,如果您的网站接受用户输入和您的数据库,并且所涉及的所有连接都是UTF-8,那么您可以接受输入为UTF-8,并且应该正确配置数据库中的字符集和排序规则。 / p>

此时您的所有网页都应该是HTML5,因此您的网页should at a minimum be this推荐的HEAD部分:

<!DOCTYPE html>
<html lang="en"> 
<head>
<meta charset="utf-8"/>

接下来你有SQL注入。你指定了PHP。如果您正在使用mysqli或PDO(根据我的经验,这是更好的选择)并且您正在使用bindParameter来处理所有变量,那么SQL注入就没有ISSUE。这个问题消失了,逃避输入的需求消失了,因为你不再需要担心SQL语句可能会混淆。 这是不可能的。

最后,你提到了htmlpurifier。这是存在的,以便人们可以尝试避免XSS和其他性质的攻击,当你接受用户输入时发生,并且这些人注入了html&amp; JS。

这总是一个问题,取决于系统的性质以及您对该输出的处理方式,但正如其他人在评论中建议的那样,您可以在从输出中检索输出后对输出运行清洁剂和过滤器数据库。坐在一个php字符串变量中没有内在的危险,直到你通过将它注入你正在服务的实时html页面来武器化它。

在找到不良演员和试图弄乱你的系统的人方面,你显然更好地保存了提交的原始输入。然后,当您了解这些漏洞利用的本质时,您可以在数据库中搜索特定的内容,如果首先进行清理并存储结果,则无法执行这些操作。

相关问题