当前位置:  开发笔记 > 编程语言 > 正文

PHP安全用户变量

如何解决《PHP安全用户变量》经验,为你挑选了1个好方法。

在我的网站上,我有一个名为$user_data包含表单输入的变量.然后我在用户页面上显示此变量(通过echo).

使用此变量避免任何安全风险的最佳方法是什么?我用strip_tags(),但还不够.

此变量也会保存到MySQL数据库中.



1> Thomas Bonin..:

为避免严重的安全问题,您必须做两件非常重要的事情.

    在将其放入SQL查询之前,您需要转义用户输入.转义意味着逃避所有特殊字符,如'; 幸运的是,有一个功能已经自动完成:mysql_real_escape_string.

    如果你不逃避用户输入,可能会发生令人讨厌的事情.想象一下,你的查询是INSERT INTO userdata VALUES ('$user_data').现在想象一下用户写的'; DROP DATABASE userdata;.

    如果你不逃避它,你的查询将变为:INSERT INTO userdata VALUES (''; DROP DATABASE userdata;').你可以想象这并不好:如果你启用了多个语句,你可以亲吻你的数据库.这称为SQL注入攻击.

    当您将变量输出给用户时,还需要使用HTML实体正确替换HTML特殊字符.幸运的是,还有一个功能:htmlspecialchars().它将转换特殊的HTML字符,如<to <.

    这似乎是一个经常被低估的问题,但实际上它是非常严重的.想象一下,如果$user_data包含.它可以利用用户浏览器中的现有漏洞,或者它可以向攻击者发送非HTTPOnly cookie(可能包含已保存的密码),或者它可以欺骗用户在通过操纵操作生成的表单上写入密码DOM(可能在javascript中),或许多其他坏事.

    这称为XSS(跨站点脚本).


精简版

    mysql_real_escape_string在将字符串插入SQL查询之前调用该字符串(但不是在echo它时).

    htmlspecialchars在将字符串显示给用户之前调用该字符串(但不是在将其放入数据库时​​).


重要的是,在数据库中插入数据之前不要执行`htmlspecialchars()`.在存储用户数据之前,您需要避免无用的转换.
推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有