当前位置: 首页 > 面试题库 >

如何防止PHP中的代码注入攻击?

颜黎昕
2023-03-14
问题内容

我有点困惑,PHP中有很多函数,有些使用这个,有些使用那个。有些人使用:htmlspecialchars()htmlentities()strip_tags()

哪个是正确的,你们通常使用什么?

这是正确的吗(如果有的话,建议我做一个更好的):

$var = mysql_real_escape_string(htmlentities($_POST['username']));

该行可以防止MySQL注入和XSS攻击?

顺便说一句,除了XSS攻击和MySQL注入之外,还有其他需要注意的事情吗?

编辑

结论:

如果我想将字符串插入数据库,则无需使用htmlentities,只需使用即可mysql_real_escape_string。在显示数据时,请使用htmlentities(),这是您的全部意思吗?

总结:

  • mysql_real_escape_string 在插入数据库时​​使用
  • htmlentities() 在将数据输出到网页时使用
  • htmlspecialchars() 什么时候用的?
  • strip_tags() 什么时候用的?
  • addslashes() 什么时候用的?

有人可以填写问号吗?


问题答案:
  • mysql_real_escape_string 在插入数据库时​​使用
  • htmlentities() 在将数据输出到网页时使用
  • htmlspecialchars() 什么时候用的?
  • strip_tags() 什么时候用的?
  • addslashes() 什么时候用的?

htmlspecialchars()何时使用?

htmlspecialchars与大致相同htmlentities。区别:字符编码。

两个编码控制字符,如<>&等等用于打开标签等htmlentities从像元音变音,欧元符号和这样的其它语言也编码字符。如果您的网站是UTF,请使用htmlspecialchars(),否则请使用htmlentities()

strip_tags()何时使用?

htmlspecialchars/ entities编码特殊字符,因此它们被 显示但未解释strip_tags删除它们。

实际上,这取决于您需要做什么。

一个例子:您已经为论坛编写了代码,并为用户提供了一个文本字段,以便他们可以发布内容。恶意的尝试:

pictures of <a href="javascript:void(window.setInterval(function () {window.open('http://evil.com');}, 1000));">kittens</a> here

如果您不执行任何操作,则会显示该链接,并且单击该链接的受害者会弹出很多弹出窗口。

如果您使用htmlentity / htmlspecialchar输出,则文本将保持原样。如果您删除它,它只会删除标签并显示它:

pictures of kittens here

有时您可能想要混合,在其中保留一些标签,例如<b>strip_tags可以在其中保留某些标签)。这也是不安全的,因此最好对XSS使用一些完整的库。

斜线

引用旧版本的PHP手册:

返回一个字符串,该字符串在数据库查询等中需要加引号的字符之前带有反斜杠。这些字符是单引号(’),双引号(“),反斜杠()和NUL( 字节)。

在向数据库中输入数据时, addslashes()的 用法示例。例如,要将名称 O’reilly
插入数据库中,您将需要对其进行转义。强烈建议使用DBMS特定的转义功能(例如,对于MySQL,使用mysqli_real_escape_string();对于PostgreSQL,使用pg_escape_string()),但是如果您使用的DBMS没有转义功能,并且DBMS使用\来转义特殊字符,则您可以使用此功能。

在目前的版本是不同的措词。



 类似资料:
  • 本文向大家介绍PHP防止注入攻击实例分析,包括了PHP防止注入攻击实例分析的使用技巧和注意事项,需要的朋友参考一下 本文以实例形式详细分析了PHP防止注入攻击的方法。分享给大家供大家参考。具体分析如下: PHP addslashes() 函数--单撇号加斜线转义 PHP String 函数 定义和用法 addslashes() 函数在指定的预定义字符前添加反斜杠。 这些预定义字符是:  单引号 (

  • 本文向大家介绍php防止CC攻击代码 php防止网页频繁刷新,包括了php防止CC攻击代码 php防止网页频繁刷新的使用技巧和注意事项,需要的朋友参考一下 网页快速恶意刷新,cc攻击就是攻击者利用代理服务器生成指向目标站点的合法请求,模拟多用户不停的对受害网站进行访问,特别是访问那些需要大量数据操作需要大量CUP时间的页面,最终导致目标网站服务器资源耗尽,一直到宕机崩溃,如此一来,造成服务器资源的

  • 问题内容: 在将输入数据放入MySQL数据库之前,我可以在Perl中使用该功能来清理输入吗?我不太了解正则表达式,所以在我做自己的功能之前,我想知道是否已经有一个正则表达式。 问题答案: 清理要插入数据库的数据的正确方法是对所有要插入SQL字符串的变量使用占位符。换句话说,永远不要这样做: 而是使用占位符: 然后在执行查询时传递要替换的变量: 您可以将这些操作与某些DBI便捷方法结合使用。上面也可

  • 问题内容: 我必须在我的java程序中添加一条语句以更新数据库表: 我听说可以通过SQL注入来利用此漏洞,例如: 我的程序具有Java GUI,并且从中检索所有名称,地址和电子邮件值。我想知道黑客如何将以下代码()添加到我的插入语句中,以及如何防止这种情况发生。 问题答案: 您需要使用PreparedStatement。例如 这样可以防止注入攻击。 黑客将其放入其中的方式是,如果您要插入的字符串来

  • 问题内容: 这个问题的答案是 社区的努力。编辑现有答案以改善此职位。它目前不接受新的答案或互动。 如果将用户输入未经修改地插入到SQL查询中,则应用程序容易受到SQL注入的攻击,如以下示例所示: 这是因为用户可以输入类似的内容,并且查询变为: 如何防止这种情况的发生? 问题答案: 使用准备好的语句和参数化查询。 这些是独立于任何参数发送到数据库服务器并由数据库服务器解析的SQL语句。这样,攻击者就

  • 问题内容: 准备好的语句如何帮助我们防止SQL注入攻击? 维基百科说: 准备好的语句可以抵御SQL注入,因为稍后需要使用其他协议传输的参数值不需要正确地转义。如果原始语句模板不是从外部输入派生的,则不会发生SQL注入。 我不太清楚原因。用简单的英语和一些例子,简单的解释是什么? 问题答案: 这个想法很简单-查询和数据被发送到数据库服务器 分开 。 就这样。 SQL注入问题的根源在于 代码和数据 的