手把手叫你SQL注入攻防(PHP语法)

发表于:2014-1-28 11:35

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:wusuopuBUPT    来源:51Testing软件测试网采编

  5.原理--为什么用户名不正确,却可以显示hello?
  我可以echo一下:
<span style="font-size:18px;">$sql="select * from test where name='".$_GET['username']."'and password='".$_GET['password']."'";
echo $sql;exit;</span>
  显示:
  拿到我的mysql数据库中查询:
  可以看到,居然能查到信息,因为sql语句中,前一半单引号被闭合,后一半单引号被 “--”给注释掉,中间多了一个永远成立的条件“1=1”,这就造成任何字符都能成功登录的结果。
  6.小结:
  1)其实这个sql注入过程上很简单,困难的地方在于提交SQL注入语句的灵活性上面,单引号的使用很关键,另外,多用echo打印调试也很值得一试~~
  2)GET方式提交表单很危险,所以还是用POST方式吧!
  参考:http://blog.csdn.net/gideal_wang/article/details/4316691
  3)防止SQL注入:可以看出,sql注入就是用户提交一些非法的字符(如本文的单引号’和sql语句的注释号--,还有反斜杠\等),所以要用转义:  htmlspecialchars函数,mysql_read_escape_string函数都可以实现。
  4)JS段验证表单了,JSP/PHP等后台还要验证码?
  ---需要,因为friebug可以禁用JS...
  --------------------------------------------------------------------------
  update:
  上面的方法,当password通过md5加密的话,就无法实现注入了,那么就在username上做手脚:
  username后面的内容就都被注释掉了。哈哈~
22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号