1 / 17

谈程序的修改技巧

谈程序的修改技巧. 郑海山 http://dog.xmu.edu.cn. 修改代码原则. 寻找合适的代码 记录每个修改 通读源代码 修改最少 耦合度最低. 寻找合适的代码. 修改代码不如自己重写代码,除非时间、人力方面不允许。 修改代码之前必须先读懂对方的源代码,这花的时间可能会比自己写花的时间更多。必须在这两者之间取得平衡。

adonis
Download Presentation

谈程序的修改技巧

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 谈程序的修改技巧 郑海山http://dog.xmu.edu.cn

  2. 修改代码原则 • 寻找合适的代码 • 记录每个修改 • 通读源代码 • 修改最少 • 耦合度最低

  3. 寻找合适的代码 • 修改代码不如自己重写代码,除非时间、人力方面不允许。 修改代码之前必须先读懂对方的源代码,这花的时间可能会比自己写花的时间更多。必须在这两者之间取得平衡。 • 改变自身需求,使需求适应下载的代码,达到直接使用,无需修改。 比如你打算找一个实现某些功能的代码,可是找了很多代码,要不只能实现其中的某些功能,要不就是某些功能不完全符合你的要求,这时就必须改变自己最原始的想法,找一个最接近的代码。因为有时候你原先的需求就是错误的。

  4. 寻找合适的代码 • 代码必须架构合理,编码规范,这样的代码安全系数才比较高。 • 源代码作者经常更新。 源代码公布后,如果有什么安全漏洞,整个系统就暴露在cracker面前。只有源代码作者根据用户的建议不断修复Bug和增加功能,才是可信赖的系统。

  5. 寻找合适的代码 • 推荐网站 www.sourceforge.net和 www.google.com。sourceforge.net 是网上最大的开放源代码聚合地。有大量的源代码,分类组织,便于查找。google.com 最好的搜索引擎,基本上你可以找到任何东西,如果你使用了正确的关键字。通过搜索技巧,变换关键字。

  6. 记录每个修改 • 使用文本文件记录下修改,以便快速恢复 因为开始我们只是试用一个系统,或者只是试着加入一些功能,如果加入功能失败,你又不知道加入了那些东西,这时你可以全部删除你刚才的修改,把原始文件重新解压,根据文本文件的记录恢复到某个版本。或者使用cvs系统自动控制。 • 记录下打算增加或者修改的事情,记为todo,完成后放入done区。可以使用文本文件手动维护todolist。

  7. 记录每个修改 • 有了这个记录,就可以在下次推出新版本后继续修改。 • 每件事都有记录是一个好的习惯。 • 在源代码里也可加上记录,比如//2003.12.25 modify by Haishion,禁止在下班时间发表,Begin something…………//2003.12.25 modify by Haishion,禁止在下班时间发表,End

  8. 通读源代码 • 通读代码包括通读目录下的所有文件,特别是Readme,Manual,help,guide,doc,faq这种开头的文档。很多简单的安装出错其实在手册里面都已经告诉你了。 • 修改别人的程序时一定要通读代码,这样才可以保证修改了不加入新的Bug,并且可以充分利用原先的代码。 • 有时为了增加一个新功能,你可以写了一个下午的代码,过几天后发现源代码里面其实有这个功能函数,只需调用某个函数即可。这就是没有通读源代码的结果。

  9. 通读源代码 • 用文本文件记录下代码的函数功能,一些值得注意的地方。 • 一定必须确保你知道这个软件在干什么,管理员有几个入口,有几个内置帐号需要关闭等等。

  10. 修改最少 • 定位修改位置,可以使用Editplus的目录全文检索功能。根据用户界面的文字做关键字。Web的用户界面文字可能不准确,可以查看web源代码或者缩小文字单位。 • 如果一个功能有多个修改方法,使用修改最少的那种。虽然这种可能破坏了代码的架构。

  11. 耦合度最低 • 增加进去的代码应该尽量跟原程序比较分离。总的原则是:源代码就像刺猬,能不碰就不碰。 • 把增加的代码包装成一个过程或者函数,在正确的地方调用一下即可。这样是为了代码的美观。

  12. 耦合度最低 给函数增加功能的方法: 比如一个函数void foo(int i, string s);在多处有调用,你要给foo加入一个新的功能在你自己的代码内调用,你可以。 • 写一个void foo_new(int i, string s, boolean b);把foo这个函数体拷贝到foo_new。在foo_new里添加代码,这样的坏处是你如果更新foo,你必须同时更新foo_new。有相同的代码散布在系统各处是编程大忌。 • 写一个void foo_new(int i, string s, boolean b);把foo改为调用foo_new(i, s, DEFAULT VALUE)。 • 不写foo_new函数,使用全程变量,blnHackIt,初始值为DEFAULT VALUE,在新调用的地方把blnHackIt设置定某个值,在foo里面加入if blnHackIt = SOME VALUE then do something… end if 选择后面2种之一。

  13. 针对下载的Asp代码的修改 • 修改数据库文件名 例如改为dsfs354sfubzdpIUHndsgs.mdb,使用拷贝粘贴放入数据库连接字符串。 根据zhiwei的建议,在IIS里给*.mdb影射一个字节为0的假*.dll文件。 • 如果是SqlServer,新建一个权限比较低的用户作为该数据库的管理员。如果这个用户被攻破,他也做不了什么。如果可以,使用Windows 身份验证而不是Sql身份验证。 • 如果有上载文件管理,注意过滤上载文件某些特定的后缀名,把可上载的目录设置为不能执行脚本权限。

  14. 针对下载的Asp代码的修改 • 查看是否有对用户的输入做过滤 如是整型就用一个自己包装的函数int GetInt(string s)在函数内,如果不是整形,就简单得结束脚本。 Response.Clear; Response.End;不要告诉用户哪里出错了,因为在正常使用时不会发生这种情况。 如是字符型就用string FilterInputSql(string s)开始可能只过滤 ’ ,以后发现新的漏洞可以只修改这个函数即可。 • 防止跨站点脚本攻击http://dog.xmu.edu.cn/profile.asp?name=<script>alert(‘hehe’);</script>攻击者可能会得到使用你网站的用户的cookie信息。如果你在cookie保留用户的用户名和密码。。。

  15. 针对下载的Asp代码的修改 • 修改管理员密码,密码必须是强密码,包括大小写、数字、特殊符号。不要用头脑记密码,把密码用一个软件记录起来。 • 不要把系统交给没有安全意识的人去管理,不要给他们开任何有管理权限的帐号。

  16. 针对下载的Asp代码的修改 • 一般应保留版权信息,如果为了防止系统被cracker破坏,可以去掉版权信息,更换文字。 有时cracker掌握了某个源代码的漏洞后,会通过 www.google.com来查找所有安装了这个源代码的网站并实施攻击。 有些软件的版权信息隐藏得很隐蔽,比如9sky的留言簿,放在text类型的mdb数据库字段内。你如果查找全站代码,无法找到,使用access查看数据库,也不能直接看到。在text类型的字段内,不但有版权信息,还有2行关键代码,如果你简单得注释或者去掉版权信息将导致系统无法运行。

  17. 结束 • 联系我 Haishion AT xmu.edu.cnblog: http://dog.xmu.edu.cn欢迎交流,互相学习。

More Related