在php中去除标签或mysql\u real\u escape\u字符串或添加\u magic\u引号
我最近读了一些关于php安全性的文章,感到头晕目眩,请解释清楚 我知道我应该使用在php中去除标签或mysql\u real\u escape\u字符串或添加\u magic\u引号,php,security,Php,Security,我最近读了一些关于php安全性的文章,感到头晕目眩,请解释清楚 我知道我应该使用strip_tags()或htmlentities()进行XSS攻击。但是如果我需要一些where-html标记,就像博客文章一样,我应该怎么做呢 但是我应该在哪里使用mysql\u real\u escape\u string()和add\u magic\u quotes()? 这些是一样的吗 另一个问题是,我应该为每个SQL查询使用mysql\u real\u escape\u string()吗?(插入,更新,
strip_tags()
或htmlentities()
进行XSS攻击。但是如果我需要一些where-html标记,就像博客文章一样,我应该怎么做呢
但是我应该在哪里使用mysql\u real\u escape\u string()和add\u magic\u quotes()
?
这些是一样的吗
另一个问题是,我应该为每个SQL查询使用mysql\u real\u escape\u string()吗?(插入
,更新
,选择
,删除
,等等)?此函数是否会对我的数据产生不良影响(例如,在带有html标记或“
,”
)的博客文章上)
我知道我应该使用strip_tags()
或htmlentities()
进行XSS攻击。但是如果我需要一些where-html标记,就像博客文章一样,我应该怎么做呢
如果您不信任用户,则解析HTML,然后将文档序列化回HTML
但是我应该在哪里使用mysql\u real\u escape\u string()和添加\u magic\u quotes()?这些是一样的吗
它们不一样,一般来说,你应该避免它们
另一个问题是,我应该为每个SQL查询使用mysql\u real\u escape\u string()吗
在将所有用户输入传递给dabtas之前,应先转义所有用户输入
我知道我应该使用strip_tags()
或htmlentities()
进行XSS攻击。但是如果我需要一些where-html标记,就像博客文章一样,我应该怎么做呢
如果您不信任用户,则解析HTML,然后将文档序列化回HTML
但是我应该在哪里使用mysql\u real\u escape\u string()和添加\u magic\u quotes()?这些是一样的吗
它们不一样,一般来说,你应该避免它们
另一个问题是,我应该为每个SQL查询使用mysql\u real\u escape\u string()吗
在将所有用户输入传递给dabtas之前,应先转义所有用户输入 忘掉那些神奇的引语吧。自动转义用户输入中的某些控制字符是一种懒惰的方式。即将筛选/清理用户输入,您将发现原因 此功能是否会对我的数据产生不良影响(例如,在博客上) 有html标记或“,”)的帖子 您不应该有任何问题,因为数据没有用额外的斜杠存储在数据库中。如果是,则很有可能magic_quotes已启用,需要关闭 我应该为每个SQL查询使用mysql\u real\u escape\u string()吗
在使用用户输入进行查询之前,需要对其进行过滤/消毒。使用该函数或准备好的语句。忘记神奇的引号。自动转义用户输入中的某些控制字符是一种懒惰的方式。即将筛选/清理用户输入,您将发现原因 此功能是否会对我的数据产生不良影响(例如,在博客上) 有html标记或“,”)的帖子 您不应该有任何问题,因为数据没有用额外的斜杠存储在数据库中。如果是,则很有可能magic_quotes已启用,需要关闭 我应该为每个SQL查询使用mysql\u real\u escape\u string()吗
在使用用户输入进行查询之前,需要对其进行过滤/消毒。使用该函数或准备好的语句。如果您需要在博客文章中允许HTML,您应该将标记和属性列为白名单,但您不应该自己尝试。相反,使用HTMLPurifier。在存储到数据库之前使用if,因为它很重,速度慢,但非常安全
根本不应该使用魔法引号。曾经mysql\u real\u escape\u string()应用于查询中提供的每个参数。这就是防止SQL注入所需要的一切。当然,确保连接需要您实际发送的字符编码是一个先决条件。如果您需要在博客文章中允许HTML,您应该将标记和属性列为白名单,但您不应该自己尝试。相反,使用HTMLPurifier。在存储到数据库之前使用if,因为它很重,速度慢,但非常安全
根本不应该使用魔法引号。曾经mysql\u real\u escape\u string()应用于查询中提供的每个参数。这就是防止SQL注入所需要的一切。当然,确保连接期望您实际发送的字符编码是一个先决条件。通用卫生功能的想法是一个错误的概念 每个目的都有一种正确的卫生方法。在字符串上运行一个通用的方法通常会破坏它——为SQL查询转义一段HTML代码会破坏它以在网页中使用,反之亦然。在使用数据之前,应立即应用卫生设施:
mysql_real_escape_string() for functional mysql_* calls (or parametrized queries)
htmlspecialchars() for safe HTML output
preg_quote() for use in a regular expression
escapeshellarg() / escapeshellcmd() for use in an external command
etc. etc.
使用“一刀切”的卫生功能就像在一棵植物上使用五种剧毒杀虫剂,根据定义,这种杀虫剂只能含有一种虫子——结果却发现你的植物感染了第六种虫子,而所有的杀虫剂都不起作用
始终使用正确的方法,最好是在将数据传递给函数之前直接使用。除非需要,否则不要混合使用方法。通用卫生功能的概念是一个不完整的概念 每个目的都有一种正确的卫生方法。在字符串上运行一个通用的方法通常会破坏它——为SQL查询转义一段HTML代码会破坏它以在网页中使用,反之亦然。在使用数据之前,应立即应用卫生设施:
mysql_real_escape_string() for functional mysql_* calls (or parametrized queries)
htmlspecialchars() for safe HTML output
preg_quote() for use in a regular expression
escapeshellarg() / escapeshellcmd() for use in an external command
etc. etc.
使用“一刀切”的卫生功能就像在一棵植物上使用五种剧毒杀虫剂,根据定义,这种杀虫剂只能含有一种虫子——结果却发现你的植物感染了第六种虫子,而所有的杀虫剂都不起作用
在将数据传递给func之前,请始终使用正确的方法,最好是直接使用