C语言教学实践应重视的输入安全性问题

来源 :电脑迷 | 被引量 : 0次 | 上传用户:bands007
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要 本文提出了在C语言教学实践中应重视教导学生编写可靠的程序,特别要强调程序的输入安全性处理。并针对相关问题展开了具体的讨论,指出教学中的关键点。
  关键词 C语言 教学 实践 输入 安全性
  中图分类号:G64 文献标识码:A
  0背景
  当前计算机系统安全性问题受到了空前的重视,重要原因是互联网的广泛应用使不知身在何处的人都可能把信息送到我们的计算机里去。随着近年移动互联网、物联网技术的飞速发展,系统安全、信息安全等问题又面临了新的挑战。归根溯源,目前广泛使用的系统和应用软件中存在大量安全性缺陷,计算机基础教学中缺乏对学习者在安全性方面知识和规范的教育可能难辞其咎。
  我们希望从学生开始学习程序设计时就特别关注程序安全性问题,在教学中不断出现对安全性问题的讨论,提高学生的编写健壮性好、安全性高的程序的意识和能力。
  1正确与可靠
  我们要求学生编写正确的程序,这是C语言教学最基本的要求。但什么是正确的程序呢?针对一个具体问题写出的一段程序或是一个函数的正确与否,可以设法给出严格的定义,这种定义可以是一个具有数学意义的严格性定义,程序理论研究者在这方面已经做了很多工作。本文并不讨论严格的定义,主要借助以下直观观察:(1)一个C函数从参数计算出返回值的过程,即从输入到输出。(2)一个与外部交互的程序从输入的数据计算出输出数据的过程。
  但是,函数和程序通常不是对所有输入都能计算出输出的。例如求平方根的函数,它只能对非负的double类型的数值计算出结果。又如,C编译程序只能对满足C语言语法的字符串生成目标代码。参考上述情况,对程序的正确性可以有如下认识:(1)一个C函数对满足要求的参数计算出正确的返回值。(2)一个与外部交互的程序,对满足要求的输入数据都能计算出正确的输出。
  2遇到不正确输入时的行为
  考虑这样的情况:如果写了一个程序,该程序对形式合适的数据都能正确的计算并输出其平均值,这个程序完成了所需工作,那么可以认为该程序是正确的。现在假设输入的数据有错,例如文件里出现了不能转换为数值的字符或字符序列,这时程序已不能“正常”完成工作了,那么这个程序可能出现的行为有:
  (1)报告被处理数据有错,输出正常输入数据的平均值后结束;
  (2)报告数据有错,丢掉非数字字符后继续处理,直至读入所有数据并输出得到正确数据的平均值后结束;
  (3)报告数据有错后立即结束;
  (4)没有任何报告,产生输出后结束;
  (5)不产生任何输出就立即结束;
  (6)陷入无限循环,既不报告数据有错误也不结束;
  (7)进入不明状态,胡乱修改内存甚至破坏其他正在运行的程序,或破坏计算机内存或外存里的数据后结束或不结束。
  对用户而言,前三种情况比较容易接受。第4种情况容易给人造成假象和误解。第5、6两种情况会让人感到莫名其妙。最后的情况则非常可怕。实际程序中常常会遇到不合需要的输入,任何实用的程序,都必须考虑对错误输入的恰当处理。设计程序时要确定恰当的原则并始终如一的贯彻。处理的原则可能与应用有关,但也有一般性的原则。例如:(1)保证任何错误输入不破坏本程序自身,不将程序带入无法预知的状态。对上例,就是避免最后两种情况的产生。(2)保证程序对任何输入都有合理反应,必要时给用户提供适当的报告。上例中的前三种处理方式都有报告。(3)尽可能恢复到能继续工作的状态。上例中的第2种情况。
  可见,设计和实现交互式程序时,必须合理处置错误输入。不但要使程序保证对正确输入能正确工作,还需要保证它遇到不正确输入时具有可保证的合理行为。没有这方面保证的程序或系统是有问题的。
  3输入与安全性
  程序安全性的一个大问题就是程序输入的处理。第一,输入是不受编写程序的人控制的;第二,已经写好的程序可能遇到各种各样不满足需要的输入;第三,在遇到不满足需要的输入时应该如何处理,常常出现很难权衡的设计选择。
  合理地处理不合要求的输入,第一个条件是检查输入。要帮助学生明白这样几点:第一,从理论上说,程序的每个输入都应该仔细检查,确定其是否满足程序的需要。第二,只有满足需要的输入才能送给后续处理阶段。第三,要了解处理不正确输入时的各方面考虑。
  C语言标准函数库的输入函数的输入机制本身就是有安全性缺陷的。例如,gets函数没有输入长度限制,因此完全不应该使用而应该用fgets函数来代替;又如,scanf输入函数的%s转换描述不安全,使用时必须加上域长度限制,如%256s等。在使用C语言的输入函数时,应该检查其返回值,了解输入工作完成的情况,理解如何在输入未能正常完成的情况并且做出合理的处理。
  目前讨论较多的输入问题有两个:(1)缓冲区溢出:通过馈入超长字符序列的方式造成程序的输入缓冲区溢出,从而将某些信息写入系统内存中不应使用的位置,藉此造成进一步破坏的可能性。(2)整数溢出:输入的整数有时不是简单地作为程序里的数据,而是用于做其他事情。例如确定内存分配的大小,非合法范围的整数就可能导致系统垮台,或者导致外部取得对程序的控制。
  4结语
  由于C语言不做运行时检查,因此可能导致程序运行时出现的错误没有报告,典型的情况有:数组越界访问、空指针或不合法指针的间接访问、联合变量的不正确使用等等。在教学的过程中,这些问题都值得向学生提出并加以讨论。每个程序设计的学习者,都可能对未来计算机系统的安全运行和社会安全产生影响,因此,作为C语言教学工作的承担者对此负有重大责任。
其他文献
采用PVA-粉体复合法制备SnO2粉末前驱体,固相反应法制备掺铁SnO2陶瓷,通过XRD、SEM和EDS分析表征材料的晶体结构、表面形貌和Fe元素的微区分布状态.考察了烧结温度和Fe掺杂量
摘 要 信息技术课培养学生的目标是提高学生的综合素养。现代教育技术的不断发展,为学生自学能力的培养提供了技术和方法革新的支持。“课堂任务”要有趣味性、可操作性、合作性、生活性、层次性和创新性,可以促进学生的自主学习能力的培养,  关键词 信息技术 课堂教学 自主学习  中图分类号:G63 文献标识码:A  信息技术课培养学生的目标是提高学生的综合素养。信息化技术的发展,知识经济时
学位
摘 要 本文在强调当前我国行政学院公务员远程培训的重要性的基础上,分析了现阶段我国行政学院公务员远程培训的现状和存在的问题,最后针对问题从组织网络、过程控制、课程开发、技术保障和国际合作等方面提出了公务员远程培训的优化思路。  关键词 行政学院 公务员远程培训 优化  中图分类号:G72 文献标识码:A  我国的各级行政学院是我国公务员培训的主要机构,在新的网络环境下,行政学院
概述了自蔓延高温合成(SHS)的基本原理,总结了SHS技术制备复合材料的优点。从金属基复合材料、梯度功能材料和陶瓷内衬复合钢管3个方面,综述了SHS技术在复合材料中的应用,并