亿联网自助建站系统 开启企业建站营销新时代、免费建站平台倡导者  站长学院  高端定制请点这里
热线:13913253836
您现在的位置:首页 > 站长学院 > 建站资讯 > 策划

WEB编程安全法则

作者:eycms 日期:2015/8/5 15:50:13 人气:35

  

  WEB编程语言,分为WEB静态语言和WEB动态语言,WEB静态语言就是通常所见到的超文本标记语言 (标准通用标记语言下的一个应用 ),WEB动态语言主要是ASP,PHP,JAVAscript,JAVA,CGI等计算机脚本语言编写出来的执行灵活的互联网网页程序。

  脚本语言:

  ASP是一种服务器端脚本编写环境,可以用来创建和运行动态网页或Web应用程序。ASP网页可以包含超文本标记语言标记、普通文本、脚本命令以及COM组件等。利用ASP可以向网页中添加交互式内容(如在线表单),也可以创建使用HTML网页作为用户界面的web应用程序。

  PHP是将程序嵌入到超文本标记语言文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。PHP具有非常强大的功能,所有的CGI的功能PHP都能实现,而且支持几乎所有流行的数据库以及操作系统。最重要的是PHP可以用C、C++进行程序的扩展!

  HTML 只能提供一种静态的信息资源,缺少动态客户端与服务器端的交互。爪哇脚本(JAVA SCRIPT)的出现,使信息和用户之间不仅只是一种显示和浏览的关系,而且实现了实时地、动态的、可交互的表达方式。

  JAVAscript 是一种脚本语言,它采用小程序段的方式实现编程。它的基本结构形式与ActionScript十分类似,但她并不需要编译,而是在程序运行过程中被逐行的解释。
WEB编程安全法则:

  标有 (*) 的检查项目表示该项是针对相关问题的根本解决方法,应当尽最大努力去完成这些内容。

  未标 (*) 的项目,表示该项并不能完全消除安全隐患,只是说通过这种方法可以避免发生安全问题。

SQL注射:

  (*) 在组合SQL语句时要使用SQL变量绑定功能

  (*) 如果数据库不提供变量绑定,那么需要对构成SQL的所有变量进行转义

  不要将错误信息原封不动地显示在浏览器中。

  为访问数据库的用户设置适当的权限。

  操作系统命令行注射:

  (*) 避免使用能启动shell命令的语言

  使用的语言如果允许启动shell命令,则需要对该功能的参数种的所有变量进行检查,确保只包含合法的操作

  不检查路径名参数/目录遍历

  (*) 不要将外部传进来的参数直接作为文件名来使用

  (*) 将打开文件的操作限制在固定的目录中,并禁止文件名中包含路径

  为Web服务器上的文件设置正确的访问权限

  检查文件名:

  会话管理的问题:

  (*) 用难以推测的内容作为会话ID

  (*) 不要在URL中保存会话ID

  (*) 为https协议中使用的cookie设置secure属性

  (*) 登录成功后生成新的会话

  (*) 登录成功后,在会话ID之外再生成一个秘密信息,每次访问页面时都检查之

  不使用固定值作为会话ID

  将会话ID保存到Cookie中时,要设置有效期限

  跨站脚本攻击(XSS):

  不允许输入HTML内容时的解决方法

  (*) 输出到页面上的所有内容都要转义

  (*) 输出URL时仅允许以“http://”或“https://”开头的URL

  (*) 不要动态生成 的内容

  (*) 不要从外部网站读入样式表

  检查输入内容:

  允许输入HTML内容时的解决方法

  (*) 解析输入的HTML内容,生成解析树,然后提取其中的非脚本部分

  使用脚本删除输入的HTML内容中的相关字符串

  通用解决方法:

  (*) 应答的HTTP头重指定Content-Type的charset属性

  为避免Cookie情报泄漏,应禁止Trace方法,并对所有Cookie设置HttpOnly属性

  跨站请求伪造(CSRF):

  (*) 所有页面都通过POST来访问,在前一页面的hidden中随机生成一个信息,提交后的页面检查该信息,正确时才予以执行

  (*) 执行业务之前再次要求输入密码

  (*) 确认Referer是否正确,只有正确时才执行

  执行重要操作时,向预先设置的邮件地址中发送邮件

  HTTP头注射:

  (*) 不直接输出HTTP头,而使用运行环境提供的头信息输出API

  (*) 无法使用API时,要禁止输入的头信息中的换行

  删除所有外部输入中的换行:

  邮件盗用(通过某种手段使邮件发送到攻击者指定的地址)

  (*) 不使用外部参数作为邮件头信息

  必须用外部参数设置头信息时,要删除其中的危险字符。


回到顶部