php – 在各种环境中使Web表单输入安全的正确方法是什么?
你们都认为正确的(读取:最灵活,松散耦合,最强大等)的方式使用户输入来自Web安全,以便在Web应用程序的各个部分中使用?显然,我们可以为每个上下文使用相应的清理功能(数据库,在屏幕上显示,保存在磁盘上等),但是有一些通用的“模式”来处理不安全的数据并使其安全吗?除非安全得当,否则是否有既定的方法来强制将其视为不安全?
就像已经说过的那样,当你担心网络安全时,有几件事需要考虑.以下是一些需要考虑的基本原则:
>避免将用户的直接输入集成到查询和变量中. 所以这意味着没有像$variable = $_POST [‘user_input’]这样的东西.对于这样的任何情况,您将过多的控制权移交给用户.如果输入影响某些数据库查询,则始终使用白名单来验证用户输入.如果查询是针对用户名,请根据良好用户名列表进行验证.不要简单地使用直接放入的用户输入进行查询. 一个(可能的)例外是搜索字符串.在这种情况下,您需要进行清理,就像那样简单. >避免存放用户输入而不需要卫生设施. 如果用户正在为其他用户创建配置文件或上传信息,则必须具有可接受的数据类型的白名单,或者删除任何可能是恶意的数据.这不仅适用于您系统的安全性,也适用于您的其他用户(请参阅下一点.) >从不将用户的任何内容输出到浏览器而不剥离它. 这可能是安全顾问向我强调的最重要的事情.当用户收到输入时,您不能简单地依赖于清理输入.如果您没有自己编写输出,请始终通过编码任何HTML字符或将其包装在< plaintext>中来确保输出无害.标签.如果用户A上传了一些损害查看该页面的任何其他用户的javascript,那么开发人员就会出于简单的疏忽.知道任何和所有用户输出除了在所有浏览器上显示为文本之外什么都不做,你会在晚上睡得更好. >除了用户控制表单外,绝不允许任何人. XSS比应该更容易,并且在一个段落中覆盖真正的痛苦.简而言之,无论何时创建表单,您都可以让用户访问将处理表单数据的脚本.如果我窃取某人的会话或某人的cookie,我现在可以与脚本交谈,就像我在表单页面上一样.我知道它所期望的数据类型以及它将寻找的变量名称.我可以简单地将那些变量传递给它,就像我是用户一样,脚本无法区分. 以上不是卫生问题,而是用户验证问题.我的最后一点与这个想法直接相关. >避免使用cookie进行用户验证或角色验证. 如果我可以窃取用户的cookie,我可能做的不仅仅是让一个用户度过糟糕的一天.如果我注意到cookie有一个名为“member”的值,我可以很容易地将该值更改为“admin”.也许它不会起作用,但对于许多脚本,我可以即时访问任何管理员级别的信息. 简而言之,没有一种简单的方法来保护Web表单,但是有一些基本的原则可以简化您应该做的事情,从而减轻保护脚本的压力. 再一次好的措施: >清理所有输入 永远不要认为任何一个人的名单都是详尽或完美的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |