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

我有点困惑,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() 什么时候用的?

有人可以填写问号吗?


侃侃尔雅
浏览 538回答 3
3回答

慕慕森

仅在数据进入需要对其进行编码的系统中进行编码–否则,您将遇到要处理真实数据的情况。对于SQL注入-按照如何防止PHP中的SQL注入中所述使用绑定变量。(它讨论的是准备好的语句,但是绑定可以为您提供保护,而不是准备)。对于XSS-如果要在指定HTML或文本的位置写入HTML。在生成文档时使用htmlentities。我会避免以这种形式将数据存储在数据库中(除非在经常发生写稀疏读取的系统中,CPU性能/磁盘访问时间越来越多并且出现问题-否则我将获得该列的raw_和html_版本…或只使用memcached或类似的东西。如果要让用户输入URL,则您需要更加小心,因为javascript:do_evil()将执行有效的URI(例如,作为单击链接的href或(在某些浏览器中)作为刚刚加载的图像的src)。
打开App,查看更多内容
随时随地看视频慕课网APP