• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

JSP安全编程实例浅析

发布: 2009-6-10 09:57 | 作者: 不详 | 来源: 测试时代采编 | 查看: 64次 | 进入软件测试论坛讨论

领测软件测试网

<% String message = request.getParameter("message"); 
message = message.replace ('<','_'); 
message = message.replace ('>','_'); 
message = message.replace ('"','_'); 
message = message.replace ('\'','_'); 
message = message.replace ('%','_'); 
message = message.replace (';','_'); 
message = message.replace ('(','_'); 
message = message.replace (')','_'); 
message = message.replace ('&','_'); 
message = message.replace ('+','_'); %>  

  更积极的方式是利用正则表达式只允许输入指定的字符: 

public boolean isValidInput(String str) 

 if(str.matches("[a-z0-9]+")) return true; 
 else return false; 
}  

  四、时刻牢记SQL注入 

  一般的编程书籍在教初学者的时候都不注意让他们从入门时就培养安全
编程的习惯。著名的《JSP编程思想与实践》就是这样向初学者示范编写带
数据库的登录系统的(数据库为MySQL): 

Statement stmt = conn.createStatement(); 
String checkUser = "select * from login where username = '" + userName
 + "' and userpassword = '" + userPassword + "'"; 
ResultSet rs = stmt.executeQuery(checkUser); 
if(rs.next()) 
 response.sendRedirect("SuccessLogin.jsp"); 
else 
 response.sendRedirect("FailureLogin.jsp");  

  这样使得尽信书的人长期使用这样先天“带洞”的登录代码。如果数据库
里存在一个名叫“jack”的用户,那么在不知道密码的情况下至少有下面几种
方法可以登录: 

用户名:jack 
密码:' or 'a'='a 
用户名:jack 
密码:' or 1=1/* 
用户名:jack' or 1=1/* 
密码:(任意) 
lybbs(凌云论坛)ver 2.9.Server在LogInOut.java中是这样对登录提交的数据进行
检查的: 
if(s.equals("") ││ s1.equals("")) 
throw new UserException("用户名或密码不能空。"); 
if(s.indexOf("'") != -1 ││ s.indexOf("\"") != -1
 ││ s.indexOf(",") != -1 ││ s.indexOf("\\") != -1) 
throw new UserException("用户名不能包括 ' \" \\ , 等非法字符。"); 
if(s1.indexOf("'") != -1 ││ s1.indexOf("\"") != -1 ││ s1.indexOf("*") != -1
 ││ s1.indexOf("\\") != -1) 
throw new UserException("密码不能包括 ' \" \\ * 等非法字符。"); 
if(s.startsWith(" ") ││ s1.startsWith(" ")) 
throw new UserException("用户名或密码中不能用空格。");  

 

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

43/4<1234>

关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网