• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

php 海叔叔 22小时前 5次浏览 已收录 0个评论

PHP中有这么多函数,我对这些函数的使用感到很混乱。有人使用:htmlspecialchars(),htmlentities(),strip_tags()等

哪一个是正确的,大家通常使用什么呢?

下面这行应该是正确的(如果有更好的请给我建议):

$var = mysql_real_escape_string(htmlentities($_POST[‘username’]));
这一行可以防止MySQL注入和XSS的攻击

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

总结:

如果我想插入字符串到数据库,我不需要使用htmlentities,只需使用mysql_real_escape_string。当显示数据时,使用htmlentities(),是这样的吗?

总结:

1、mysql_real_escape_string插入数据库时​​使用

2、将数据输出到网页时使用的htmlentities()

3、htmlspecialchars()用在什么时候?

4、strip_tags()用在什么时候?

5、addslashes()用在什么时候?

最佳解决思路

htmlspecialchars()用在什么时候?
htmlspecialchars与htmlentities大致相同。区别:字符编码。

都编码控制字符,如<,>,&等用于打开标签等。htmlentities还编码其他语言,如变音符号,euro-symbols等字符。如果您的网站是utf,请使用 htmlspecialchars(),否则使用 htmlentities()。

什么时候使用strip_tags()?
htmlspecialchars /实体编码的特殊字符,所以他们显示,但不解释。 strip_tags将其移除。

在实践中,这取决于你需要做什么。

一个例子…你已经编写了一个论坛,并给用户一个文本字段,所以他们可以发布的东西。恶意的只是尝试

pictures of kittens here
如果你什么都不做,链接将被显示,点击链接的受害者将得到大量的pop-ups。

如果你的输出是htmlentitiy /htmlspecialchar,那么文本会在那里as-is。如果你strip_tag它,它只是删除标签,并显示它:

pictures of kittens here
有时你可能想要一个混合,在那里留下一些标签,如(strip_tags可以在那里留下一些标签)。这也是不安全的,所以最好使用一些对xss的完整库

addslashes
引用php手册:

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

addslashes()的一个例子是当你输入数据到数据库。例如,要将O’reilly这个名字插入到数据库中,你需要将它转义出来,它强烈建议使用DBMS特定的转义函数(例如MySQL的mysqli_real_escape_string()或PostgreSQL的pg_escape_string()),但是如果你使用的DBMS没有转义函数,而DBMS使用\来转义特殊字符,你可以使用这个函数。

次佳解决思路
只有在进入系统需要进行编码时才对数据进行编码 – 否则会遇到您想操纵实际数据的情况。

对于SQL注入 – 使用How can I prevent SQL injection in PHP?中描述的绑定变量(它谈论准备好的语句,但它是给予保护的绑定,而不是准备)。

对于XSS – 如果您在指定HTML或文本的位置写入HTML。在生成文档的地方使用htmlentities。我会避免以数据库的形式存储数据(除了可能在write-rare-read-通常系统的CPU性能/磁盘访问时间成为问题 – 然后我将有一个raw_和html_版本的列…或只是使用memcached或类似的)。

如果你让用户输入URL,那么你需要更加小心,因为javascript:do_evil()是一个有效的URI将被执行(例如作为一个点击链接的href或(在某些浏览器中)刚加载的图像的src) 。


喜欢 (1)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址