php怎么添加双引号,我们常见的提交方式有哪些?
WEB安全之SQL注入
引言:
在开发网站的时候,出于安全考虑,需要过滤从页面传递过来的字符。通常,用户可以通过以下接口调用数据库的内容:URL地址栏、登陆界面、留言板、搜索框等。这往往给骇客留下了可乘之机。轻则数据遭到泄露,重则服务器被拿下。
1、SQL注入步骤
a)寻找注入点,构造特殊的语句
传入SQL语句可控参数分为两类 1. 数字类型,参数不用被引号括起来,如 2. 其他类型,参数要被引号扩起来,如
b)用户构造SQL语句(如:'or 1=1#;admin'#(这个注入又称PHP的万能密码,是已知用户名的情况下,可绕过输入密码)以后再做解释)
c)将SQL语句发送给DBMS数据库
d)DBMS收到返回的结果,并将该请求解释成机器代码指令,执行必要得到操作
e)DBMS接受返回结果,处理后,返回给用户
因为用户构造了特殊的SQL语句,必定返回特殊的结果(只要你的SQL语句够灵活)
下面,我通过一个实例具体来演示下SQL注入 二、SQL注入实例详解(以上测试均假设服务器未开启magic_quote_gpc)
1) 前期准备工作 先来演示通过SQL注入漏洞,登入后台管理员界面 首先,创建一张试验用的数据表:
CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(64) NOT NULL, `password` varchar(64) NOT NULL, `email` varchar(64) NOT NULL,PRIMARY KEY (`id`),UNIQUE KEY `username` (`username`) ) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;添加一条记录用于测试:
INSERT INTO users (username,password,email)VALUES('MarcoFly',md5('test'),'marcofly@test.com');接下来,贴上登入界面的源代码
<html><head><title>Sql注入演示</title><meta http-equiv="content-type" content="text/html;charset=utf-8"></head><body ><form action="validate.php" method="post"><fieldset ><legend>Sql注入演示</legend><table><tr><td>用户名:</td><td><input type="text" name="username"></td></tr><tr><td>密 码:</td><td><input type="text" name="password"></td></tr><tr><td><input type="submit" value="提交"></td><td><input type="reset" value="重置"></td></tr></table></fieldset></form></body></html>附上效果图:
当用户点击提交按钮的时候,将会把表单数据提交给validate.php页面,validate.php页面用来判断用户输入的用户名和密码有没有都符合要求(这一步至关重要,也往往是SQL漏洞所在)
! <!--前台和后台对接--><html><head><title>登录验证</title><meta http-equiv="content-type" content="text/html;charset=utf-8"></head><body><?php $conn=@mysql_connect("localhost",'root','') or die("数据库连接失败!");; mysql_select_db("injection",$conn) or die("您要选择的数据库不存在"); $name=$_POST['username']; $pwd=$_POST['password']; $sql="select * from users where username='$name' and password='$pwd'"; $query=mysql_query($sql); $arr=mysql_fetch_array($query);if(is_array($arr)){ header("Location:manager.php"); }else{ echo "您的用户名或密码输入有误,<a href=\"Login.php\">请重新登录!</a>"; } ?></body></html>注意到了没有,我们直接将用户提交过来的数据(用户名和密码)直接拿去执行,并没有实现进行特殊字符过滤,待会你们将明白,这是致命的。 代码分析:如果,用户名和密码都匹配成功的话,将跳转到管理员操作界面(manager.php),不成功,则给出友好提示信息。 登录成功的界面:
登录失败的提示:
到这里,前期工作已经做好了,接下来将展开我们的重头戏:SQL注入
2) 构造SQL语句 填好正确的用户名(marcofly)和密码(test)后,点击提交,将会返回给我们“欢迎管理员”的界面。 因为根据我们提交的用户名和密码被合成到SQL查询语句当中之后是这样的: select * from users where username='marcofly' and password=md5('test') 很明显,用户名和密码都和我们之前给出的一样,肯定能够成功登陆。但是,如果我们输入一个错误的用户名或密码呢?很明显,肯定登入不了吧。恩,正常情况下是如此,但是对于有SQL注入漏洞的网站来说,只要构造个特殊的“字符串”,照样能够成功登录。
比如:在用户名输入框中输入:' or 1=1#,密码随便输入,这时候的合成后的SQL查询语句为: select * from users where username='' or 1=1#' and password=md5('') 语义分析:“#”在mysql中是注释符,这样井号后面的内容将被mysql视为注释内容,这样就不会去执行了,换句话说,以下的两句sql语句等价:
select * from users where username='' or 1=1#' and password=md5('')等价于
select* from users where usrername='' or 1=1因为1=1永远是都是成立的,即where子句总是为真,将该sql进一步简化之后,等价于如下select语句:
select * from users 没错,该sql语句的作用是检索users表中的所有字段
上面是一种输入方法,这里再介绍一种注入的方法,这个方法又称PHP的万能密码
我们再已知用户名的条件下,可以不能密码即可登入,假设用户名:admin
构造语句:
select * from users where username='admin'#' and password=md5('')等价于
select * from users where username='admin'这样即可不能输入密码登入上去的。
数据库就会错认为不用用户名既可以登入,绕过后台的验证,已到达注入的目的。
同样利用了SQL语法的漏洞。
看到了吧,一个经构造后的sql语句竟有如此可怕的破坏力,相信你看到这后,开始对sql注入有了一个理性的认识了吧~ 没错,SQL注入就是这么容易。但是,要根据实际情况构造灵活的sql语句却不是那么容易的。有了基础之后,自己再去慢慢摸索吧。 有没有想过,如果经由后台登录窗口提交的数据都被管理员过滤掉特殊字符之后呢?这样的话,我们的万能用户名' or 1=1#就无法使用了。但这并不是说我们就毫无对策,要知道用户和数据库打交道的途径不止这一条。
你有遇到过那种自学编程也学得很厉害的人吗?
不请自来,能毛遂自荐下自己么?
虽然是计算机专业出身,但是大学里面学习的那些内容,真的算是比较落伍的知识了。现在大学计算机专业在教什么我不太清楚,但是在十年前,当Java框架已经走向Spring2.X的时候,学校还在教ASP和.Net,毕业设计更是比较简单的各种XX管理系统,最多有个CRUD的界面,完全不考虑什么性能,页面UI什么,只要能完成老师完成的任务就够了,面对这样的知识栈,就只能任由自己这么学习下去么?
NO NO NO
于是作为不断摸索新知识的我,连同宿舍另外一位小伙伴,开始了课外学习的道路,而这一选择,也使得自己在校招的时候,比起其他同学有了更好的资本。
多参加校内外组织的编程类竞赛有了不限于书本知识的想法,就要付诸实践,于是自己和宿舍的小伙伴,不断的参加校内外组织的各种编程大赛,开始可能就是过去当炮灰的,不过慢慢的就积累了经验,可以入围到复赛了,这里实际上锻炼了自己几方面的能力:
需求分析能力算法知识提高解决方案包装沟通协调能力对于以上几点,我相信工作多年的程序猿/媛朋友,应该是深有体会吧。虽然还在学校,实际上已经是准实习的状态了,及早的接触这些,会对未来的工作帮助很大。由此,在校招的时候,也能有很好的说辞,毕竟参赛经验≈项目经验
Github和CSDN是好东西看到Github大家可能司空见惯了,上面有很多好的开源项目,自己也可以在上面建立自己的Page,分享你的开源代码,当然,更多的时候顶礼膜拜全世界的各路大神。CSDN的,在几年前还是很不错的,至少上面各种编程知识很多,国内的大神也会在上面分享各种原创的经典文章,远比现在各种广告满天飞,收费引导的情况好多了。
那时候自己也注册了很多其他的论坛,博客,不断的学习,吸收各种不同的知识,开始是杂糅,后面根据自己的工作,形成了现在Node+Python作为后端,前端为Vue为主的技术栈,对于中小型的项目来说,已经是绰绰有余了,而且能根据客户需求,快速迭代开发,维护起来也比较方便。
Talk is cheap, show me your codeLinux 的创始人 Linus Torvalds 在 2000-08-25 给linux-kernel 邮件列表的一封邮件发表了这个金句,到现在还是让人振聋发聩。没错,说的再多,不如写出能实现功能的代码来的实际,程序员的本质,就是为了解决用户或者项目需求的,不能写代码,对不起,可以考虑做下产品经理或者测试工作了,程序开发这行不太适合您。
从工作以来,自己写的代码没有实际计算过,但是至少自己亲身开发了了10+个中小型的项目,从前端/后端/服务器/网络自己都干过,虽然有些杂,但是好在都自己上手做过了,虽然Debug的时候也很多,但问题解决的一刹那,的确是非常爽的。所以,好记性不如烂笔头,说再多,不如写一行代码,没法,程序员就是这么讲究实际,不玩虚的。
不断总结,不断学习作为入门了程序开发的行当,如果你不能持续学习,那么很有可能你就作为前浪,被后浪拍死在沙滩了。这段时间大厂裁员情况很严重,大家都感到了人心惶惶,自己也是感到了不小的压力。不过,老话说的是,技多不压身,多学习些新知识,不断的总结自己掌握的解决方案,开发知识,对自己是百利而无一害的。中考高考时候还有一个错题本,来汇总自己常犯的错误,开发过程当中也一样,要不断的总结归纳,下次遇到同样的问题,就能马上找到知识点去解决了。
这里推荐用为知笔记或有道云笔记,将网上或者自己总结的部分整理成知识点,用标签打标,遇到同类问题的时候不断维护更新,提升会非常快。
总结好了,说了这么多,既然入了开发这门行当,就要做好不断学习的准备,在这里分享这些,也是对自己做开发的一些感悟,说的有不对的地方,欢迎大家在下方评论区批评讨论~
怎么用搜索引擎在一个指定的网站中搜索一个词?
在使用谷歌搜索引擎的时候,可以使用:
site:限定搜索结果在某个域名或目录下,比如:网站优化 site:googlenb.com即为:搜索googlenb.com网站中包含网站优化的相关页面。 如果我们不加关键词通常返回的是这个网站收录的总条数,我们也可以搜索某个网站某个栏目收录了多少条,比如:site:googlenb.com/info/ 返回的即为改URL目录下的所有内容,目录限定仅支持谷歌。
当然谷歌还有其他的高级用法:
双引号 :把关键词放到双引号内,搜索引擎默认采用模糊匹配方式,会将词组进行拆分以及同义词分析,此时加上双引号可以强制进行完全匹配搜索。即:双引号内的内容必须完整并连续的出现。注意双引号必须为英文状态下输入。减号: 排除-号后面的内容,即我们在搜索某写内容时候,排除掉页面中内容中包含某些关键词的页面,比如搜索:网站优化服务 -郑州 ,即为:搜索提供网站优化服务的相关信息,但是又不想看郑州相关的。* 星号:可以充当通配符,意为任何字词或短语,比如搜索:北京*网络信息技术有限公司 ,即为搜索:北京某某网络信息技术有限公司,搜寻北京不同网络公司有限公司的名称。
() 小括号:将关键词包裹在括号内,一般与下方的OR、| 、AND 等一起使用,表示一个分组单元,控制搜索的执行方式。
OR 以及 | : 搜索两个或者多个关键词时候,出现某一个即可,比如搜索: (北京|上海) 网站优化工程师 ,即为:搜索北京或者上海招聘网站优化工程师的相关信息。
AND :与OR的区别在于 AND 相邻的关键词必须都出现在页面中。
filetype :将搜索结果限制为特定的文件类型。例如,PDF,DOCX,TXT,PPT等。比如: SEO filetype:pdf ,即为:搜索PDF格式的SEO相关文档。
intitle 以及 allintitle : 都表示在网页标题Title内搜索目标关键词,不同的是allintitle 后跟的所有关键词必须都出现在网页标题中,比如:intitle:后台登录 ,即为:搜索标题为后台登录的网址。
inurl 以及allinurl : 都表示在网页url地址内搜索目标关键词,不同的是allinurl 后跟的所有关键词必须都出现在网页URL中,比如:inurl:/admin/login.php ,即为:搜索后台登录的URL地址。
intext 以及allintext : 都表示在网页内容中搜索目标关键词,不同的是allintext 后跟的所有关键词必须都出现在网页内容中, 比如:intext:后台登录,即为:搜索网站内容中包含后台登录的页面。
AROUND(X) :邻近搜索。两个搜索关键词中间最多相邻X个词语,比如:郑州 AROUND(4) 网站优化 , 即为:搜索开头为郑州,中间有0到4个任意词语,后面紧跟网站优化的相关页面。
#..# :搜索一个数字区间,比如:互联网大会 2013..2018 ,即为:搜索互联网大会 2013年到2018年的相关信息。
inanchor 及 allinanchor :查找指定锚文本链接的页面。 比如:inanchor:点击这里 ,返回的结果其实为指向这些页面的锚文本是“点击这里” 。 allinanchor为后面跟地关键词完全出现在锚文本中。
天津的雾霾天数为什么比去年少了?
不止天津,这个冬天,整个华北平原的雾霾都比去年少,北京12月号称无霾月,天津情况如何呢,我们来看下数据,2017年11月,天津共出现5天轻度污染,3天中度污染,其余皆为优良,优良天数高达73.3%,到了12月,3天轻度污染,2天中度污染,4天重度污染,其余皆为优良,优良天数高达71%。整整2个月,如果说哪个时段空气稍微差一些,那就是12月29-31日,即2017年最后3天。
以上数据来自于https://www.aqistudy.cn/historydata/daydata.php?city=%E5%A4%A9%E6%B4%A5&month=2017-12 大家可以进行验证。
老百姓的感觉就更直观了,这个冬天以来,蓝天居多,而且有时候,傻蓝傻蓝的,感觉回到了小时候,具体原因有三个
一:天公“作美”
请注意,“作美”打了引号,冬天以来,天津盛行西北风,留给污染物堆积的时间非常少,经常时北风刚吹完,污染物有点冒头,马上又被吹干净了,这就是大自然的馈赠啊。不过总刮西北风,也不全然都是好处,干燥啊,这都跨年了,初雪还没个指望。
二、强化督查
这个冬天,环保部绝对是重拳出击,不断加大对社会企业的督查,就在1月6日还出了条新闻,28个督查组共检查了678个企业(单位),发现27家存在涉气环境问题。对于一些情况严重的,自然采取了关停处理。
小墨可以举个例子,前段时间在装修,发现地砖不让切割了,做橱柜的说一个月搞好,结果2个月都没搞好,原来搬到河北怀来了,河北当地也有不少工厂被关停。
三:取暖的结构性调整
这个不多说了,在前段时间引起了很大争议,主要就是媒改气,由传统的燃煤改为相对清洁的天然气。
多项措施并举,加上老天也帮忙,今年冬天天津的空气确实不错,希望以后每个冬天,都是蓝天当道,少点雾霾。
PHP为什么这么难学?
PHP同JAVA,Python,c相比,应该是相对简单的一门语言,而针对自学者来说,那就需要一个可行的计划,和足够的耐心来学习,如果全身心的投入编程中,四个半月就可以走马上任了,当然自己也得付出足够的毅力与时间去实践。
最好是当天学习到的知识当天消化,多敲代码,多去尝试着开发各种商城,系统等等。
下面我就想分享一下我刚开始学习PHP的时候,老师给我拟的一份四个半月学会PHP的学习大纲。总共分四个阶段。
第一阶段
html+css(两个星期(10天课)周六周天完成京东商城首页和注册页面)
第二阶段
1.php基础阶段(10天课程,从php的语法开始学习,到循环语句,条件语句...基本学习没门语言开始学习的时候都要学习的基础)
2.mysqli扩展库对数据库的操作(3天)
3.mysql数据库学习(创建表,增删改查,数据库和数据库表的导入导出)(3天)
4.项目新闻列表分页(利用以上学习,使用a标签的get请求方式实现分页)(2天)
php进阶阶段
1)GD库(制作验证码)
2)文件上传,实现多文件和单文件的上传(2天)
3)正则表达式(1天)
4)文件目录(4天)
5)利用学的文件目录知识(新闻项目——实现没增加一条新闻就存入数据库的同时生成静态页面,存到文件中)(2天)
6)PDO类对数据库的操作(3天)
7)设计模式(3天)
8)面向对象(类,接口,继承,封装等)(4天)
9)封装文件上传类,mysql类(增删改查),验证码类(3天 ,一天一个)
10)session(利用session实现用户登录状态和非登录状态)(1天)
第三阶段
1.js语法基础(3天)
2.jq语法基础(3天)——写一个轮播图和一个定时器
3.ajax和json基础(3天)
4.ajax和json结合实现登录效果,页面不刷新请求服务器效果(2天)
5.redis基础(2天)
6.mongodb
7.memcached
第四阶段
tp框架一个商城(15天)
laraval框架一个博客(15天)(其中的一小点功能应用memcached缓存实现点赞)
微信接口的调用(微信公众号中用代码调用接口实现获取用户信息,调用天气接口,获取每天的天气)(5天)
小程序基础(10天)
自学的话要了解到博客里面有什么功能模块(并通过所学的知识实现他)