如果回到1997。
http://www.tianya.cn/publicforum/content/funinfo/1/1169698.shtml
这是天涯上很火的帖子。在枣报上看到的。
很多的回复让人触动。我忽而觉得,这世上很多的美好和感动,都是小角色创造的。
如果自己回到1997,我却记不起最想做什么了。
http://www.tianya.cn/publicforum/content/funinfo/1/1169698.shtml
这是天涯上很火的帖子。在枣报上看到的。
很多的回复让人触动。我忽而觉得,这世上很多的美好和感动,都是小角色创造的。
如果自己回到1997,我却记不起最想做什么了。
我从家乐福的班车上跳下来的时候,看到路边的地摊只剩下从我搬到这里就在一直坚持着的炒饭,前一阵子出现的麻辣烫和小炒已经连续几天不见了。再看着不知什么缘故被挖得泥泞不堪的马路,和阴湿的天气,我忽而觉得,这日子,就像做着一辆长途巴士,从早到晚,从黑夜到白天,风景一直变化着,你不知疲倦却又有点不耐烦,终究不知道何时才是终点。
大学里每次从家到东北,都是坐长途巴士到烟台再改坐轮船。这段坐长途大巴的经历,却是至今难忘。黄昏的时候,插上耳机,听许巍的歌。在晃动的车厢里看窗外摇曳陌生的风景,夕阳透过灰蒙蒙的玻璃折射进来,卧铺上被翻洗过多次却仍然有着混合了多种人的气息的余味,在这时仿佛都成为宁静的一种。安详。不知道终点在那里,旅途也并不精彩,但是我能感觉,有了这些,我就可以忍受着等待。
昨天下班接到爸妈的电话,妈妈哽咽着说外公在昨天下午走了。问我能不能抽空回去。妈妈说,要是公司忙就别回来了,回来的话可能要好多天,而且毕竟是外孙。我首先想当然是应该回去。外公外婆生前对我怎样,我其时记得不清楚,只知他们对我不薄。但是我突然想到上次回去时,外公握着我的手说想我,我便顿觉物是人非。至从外公患了癌症,大家都知道外公余日不多。可是真正到了那天,大家还是悲痛得无法收拾。我尚且不知道回去该怎么面对,不知该怎样在众人面前表示我的悲痛。我后来想,几个早逝的亲戚,他们的儿子在接待的时候,也并未表现得悲痛欲绝。妈妈过一阵子打来电话说,你就不用回来了,只要记得外公就好。
我在QQ上对Tammy说,最近很不喜欢一个人,总想有个人陪着。我知道,这是前一阵子腰扭伤的缘故。那天早上,趴着睡了一晚之后,我的脖子已经让我痛不欲生。可是没想到后来的疼痛却更让我几近崩溃。我强忍着疼痛从趴着变成躺着,然后坐在床边,却发现再也不能站起来和弯腰了。我试了半小时,都宣告失败。我想打电话让爸妈过来照顾我,我想打电话给120让他们抬着病床过来接我住院,我好希望这时的我不是单身,身边有个女朋友照顾我。可是……我知道这些都无法实现,就算能实现,我也需要能行走。我只好将手边的布料塞进嘴里,忍着疼痛,从床边站了起来,并声嘶力竭地去弯腰、直立、再弯腰……我坐在床边是早上6点,到我能站起来已经是8点半。还好有老虎帮忙,不然我真不知道该怎么办。我想起爸爸常叮咛我的话,出门靠朋友。
公司这一阵子忙的项目快收尾了。最近部门内有些燥乱,缺少激情,大家都觉有力无处可使。于是也开始抱怨起来了。这大概是年轻的部门发展中必经的阶段吧。我还是充满乐观的。入手相机一部,平民级,不过够我用的了。
|
string型(需要string头文件)
|
char型(不需要string头文件)
|
|||
|
|
|
char a=’m’;
|
正确
|
|
|
|
|
char a=”m”;
|
错误
|
|
|
|
|
char *a=”m”;
|
正确
|
|
|
|
|
char a[]=”m”;
|
正确
|
|
|
string a=”hello”;
|
正确
|
char a=”hello”;
|
错误
|
|
|
string *a=”hello”;
|
错误
|
char *a=”hello”;
|
正确
|
|
|
string a[]=”hello”;
|
错误
|
char a[]=”hello”;
|
正确
|
|
|
string *p=a;
|
错误
|
char *p=a;
|
正确
|
|
|
string *p=&a;
|
正确
|
char *p=&a;
|
错误
|
|
|
cout<<a;
|
a的值
|
cout<<a;
|
a的值
|
|
|
cout<<*a;
|
错误
|
cout<<*a;
|
a的首字符
|
|
|
cout<<&a;
|
a的地址
|
cout<<&a;
|
a的地址
|
|
1、 字符数组相当于字符串
2、其末尾字符为’ \0 ‘
3、其长度=有效字符数+1,在定义字符数组长度时切记。
4、初始化方法
① char arr[6] = {"hello"};
② char arr[6] = "hello"; //与第①种相同,一般使用这一个
③ char arr[6] = {‘h’,'e’,'l’,'l’,'o’,'\0′}; //主要在特殊字符时使用
5、"a" 和 ‘a’ 的区别:前者是字符串,占用2个字节空间,后者是字符,占用1个字节空间。
6、数组长度计算:
(1)sizeof
方法:sizeof(数组名)/ sizeof(数组类型名)
说明:数组占用字节除以数组类型所占字节,结果为数组元素个数
(2)strlen
说明:strlen,求字符串有效长度
方法:strlen(字符数组名) //结果为字符数组有效字符长度,不包括末尾的’ \0′
对于char arr[]="hello";来说,sizeof(arr)为6,包含了数组末尾的’\0′,而strlen(arr)为5,不包含末尾的’\0′;
而对于其它类型的数组来说,没有strlen命令,sizeof(数组名)计算的结果就是这个数组所占用的字节数。
7、字符数组输出的特殊性
C++规定,数组的名称就是数组的首地址,对于a[ ]来说,a就是数组a的地址,但是在输出字符数组时,却有特殊的地方:
| #include<iostream> using namespace std; void main() { char a[]="How a you!"; cout<<"a="<<a<<endl; char c[]={‘H’,'o’,'w’,’ ‘,’a',’ ‘,’y',’o',’u',’!',’\0′}; cout<<"c="<<c<<endl; int b[]={1,2,3,4,5,6,7,8,9}; |
对常规数组来说,输出要使用循环。但是在上例中,输出字符数组(字符串)时,使用cout可以直接输出。
运行结果:
a=How a you!
c=How a you!
b=0012FF44
由此可见:
不管是用双引号还是单引号初始化的字符数组,用cout<<字符数组名 的格式,都可以直接输出该数组。而不是输出数组的首地址;
要输出字符数组的首地址,必须使用cout<<&数组名 的格式。
而输出整型数组及其它数组时,使用cout<<数组名 ,输出的只能是数组的首地址。
要输出整个数组,必须使用循环。
本文介绍的将是一种“奇特”的挂马方式:ARP挂马。
与前文介绍的服务器端网站挂马方式不同的是,ARP挂马并不是针对网站服务器端,也就是说,ARP挂马并没有入侵网站服务器,对网站的网页文件做出实质上的修改。这时也许你就会想,肯定是客户端那里中病毒了。不一定!ARP挂马的奇怪之处就在于:网站本身没有被修改,正在浏览该网站的客户机也没有感染病毒,但是用户正在浏览的网页却是被挂马的。
这就是ARP病毒在作祟。
让我们先来简单普及一下ARP的概念。
ISO将整个计算机网络通信功能划分为7个层次:
第七层 应用层
第六层 表示层
第五层 会话层
第四层 传输层
第三层 网络层
第二层 数据链路层
第一层 物理层
地址解析协议(Address Resolution Protocol,ARP)具体说来就是将网络层(IP层)地址解析为数据链路层(MAC层)的MAC地址。为什么要这样转换呢?因为局域网的网络流通不是根据IP地址进行,而是按照MAC地址进行传输。
比如vlan中有两台机器A(192.168.1.2)、B(192.168.1.3)。
计算机A是如何得知B的MAC地址的呢?就是通过ARP协议。
在A不知道B的MAC地址的情况下,A就广播一个ARP请求包,请求包中填有B的IP(192.168.1.2),vlan的所有计算机都会接收这个请求,而正常的情况下只有B会给出ARP应答包,包中就填充上了B的MAC地址,并回复给A。
A得到ARP应答后,将B的MAC地址放入本机缓存。但是MAC缓存是有生存周期的,生存周期到了之后后,就又会发广播包,即重复上面的过程。——因此可以预想,ARP病毒肯定是一直循环发送广播包,用来更新客户机的ARP缓存表的。
这属于Ask-Answer模式,当然,ARP协议并不只在发送了ARP请求才接收ARP应答。只要计算机接收到ARP应答数据包,就会对本地的ARP缓存进行更新,将应答中的IP和 MAC地址存储在ARP缓存中。注意,ARP病毒正是利用了这种原理,当局域网中的某台机器B向A发送一个自己伪造的ARP应答,而如果这个应答是B冒充C伪造来的,即IP地址为C的 IP,而MAC地址是伪造的,则当A接收到B伪造的ARP应答后,就会更新本地的ARP缓存,这样在A看来C的IP地址没有变,而它的MAC地址已经不是原来那个了。如果这个MAC是不存在的,就会造成网络不通,导致A不能Ping通C!这就是一个简单的ARP欺骗。
所以,大家可以设想,如果B发送的欺骗包 是用来修改客户机的ARP缓存吧里的“网关的MAC地址”的,那会带来什么后果。
我们假设B中了ARP病毒,因此向局域网内所有机器发送广播包,告诉这些机器,网关的MAC地址是B的MAC,那么vlan里所有机器在访问Internet时:
(1)http请求的数据包首先都会到达B那里,B的病毒逻辑模块会判断是哪个客户端发过来的包,转然后再转给原先的网关,与Internet通信;
(2)原先的网关给B返回HTTP响应的时候,B的病毒逻辑模块在HTTP响应包中,插入一段挂马的代码,比如
所以大家现在就清楚了,为什么网站没被挂马,客户机也没中毒,为什么访问的网页却是被挂了马的呢?对了,就是因为客户机所在的vlan里有机器中了ARP挂马病毒。
说到ARP挂马病毒,当然要提到前段时间鼎鼎大名的“磁碟机”病毒了。
那么如何找到ARP病毒所在的机器,以及如何对付ARP挂马病毒呢。
1·关于查找,由于病毒所在机器会一直发送更新网关MAC地址的广播包,用来更新客户机的ARP缓存,所以只要在 “ARP缓存表已被修改”的机器上,用arp命令就可以看出哪台机器冒充了网关——比如,有两台机器的MAC地址一样,但是你知道哪个IP是网关,那么另一个IP对应的机器就是中毒机器了。
2·关于预防,最直接的方法就是“实现本机与网关的双向绑定”,请注意要双向绑定。用的命令是arp -s。比如在客户机:arp -s [网关IP] [网关MAC],在网关就arp -s [客户机IP] [客户机MAC]。
当然也可以使用ARP防火墙,但是目前市面上很多的ARP防火墙功能都只能起到暂时保护作用。那该怎么办呢——用好的杀毒软件,并及时更新病毒码。既然不能把挂马包在http响应中去除,那如果挂马包链接的是病毒,杀毒软件就可以在该病毒尝试入侵计算机的时候,将该病毒挡在门外。趋势科技还有一个存储了大量网址信息的数据库,如果挂马的链接在该数据库标志为恶意,那么在部署了趋势科技安全方案的客户机里,该链接就会直接失效,这就是一个更主动防御的方法了。
3·当然,就算杀毒软件将挂马病毒挡在门外了,但是vlan里面的流量还是比以前多了很多,所以很多客户机会感到网速变慢。所以,争取不让病毒进入vlan,做到vlan的完善管理也是需要下大工夫的地方。
小AV们不久前收到几张免费品尝西点的券券,于是兴致勃勃地按照券上的网址,想上网查查有什么可以免费品尝的。谁料正垂涎三尺之时,office scan提示将一链接阻挡——发现病毒!小AV们毕竟是专业人士,一点也没慌张,右击网页,选择查看源代码,思索了两秒钟不到,发现老朋友
大家讨论了一下,鉴于这家西点还是挺有名的,上网光顾该店网页的食客应该不在少数,为了不让更多的人受“网马之害”,小AV们决定打电话给这家西点公司(看,这就是AV们的职业素质哇)。接电话的应该是前台,小AV们报了来历之后,就说“贵公司的网站有病毒,应该是被别人挂马了”,前台听到病毒二字,立马大惊失色。不过还好在小AV们的帮助下,前台弄清楚了怎么回事,然后通知他们的技术人员,终于该网站成功消灭了小马。
类似这样的事情,在互联网上每天都有很多起发生。现在病毒除了通过U盘传播,很大一部分都是通过网络传播。通过网络传播的途径主要有两种:1•本身携带病毒网站;2•原本健康的网站被恶意挂马。
如果因前者而中毒,那大多是因为用户本身的安全意识不足造成的。那如果是后者,用户和网站持有者就只能一肚子苦水了。尤其是网站持有者,看着网站日访问量持续低迷,只能糊里糊涂地蹲墙角画圈圈(汗~)。
所以本文将就网站持有者谈谈防止网页挂马的基本方法。(本文适合人群为大众网站编写者,非专业的安全和开发人员,旨在普及网站安全)
网站被挂马的原因无非有二:(1)网站程序有漏洞,服务器被侵入,黑客手动挂马;(2)网站服务器感染病毒,病毒具有自动挂马的特征。
1针对手动挂马
1.1入侵网站最常用的手段就是SQL注入。因此为了防止sql注入,(1)将与数据库交互的代码 和 网站本身的逻辑代码 剥离,即尽量使用存储过程。目前大多数的数据库程序的存储过程都有过滤sql注入的功能。(2)当然,有时候将sql语句写在网页里面,会大大提供开发速度,所以这时候对 post和get提交的数据进行充分的过滤就显得十分重要。比如,经典的sql注入代码”’ or 1=1 ‘”,你就可以选择 将匹配到“ or”的字符串删除,或者将o和r用ascii码代替。(3)程序写得再好,也难免有漏洞,就连MS的Windows也常有漏洞报出,所以,我们也要做好网站被入侵的最坏打算,因此,将数据库服务器和网站服务器分离便是一个很好的方法。就算黑客通过sql注入获得了数据库的管理员权限,那他也没办法登陆网站服务器实施挂马。
1.2手动挂马最常用的第二种手段是利用上传漏洞。如果你的网站里包含上传功能,那这时候你就要小心了。(1)首先确保你的程序做足了上传文件的识别功能。请注意,不能只靠文件后缀名来识别文件类型,而要通过文件头来判断。很多asp木马都会伪装成图片来躲过这一关。(2)正如前文所述,程序写得再好 也难免有漏洞。因此这时,对服务器的设置的好坏就起了关键作用。将您的服务器的图片上传目录设为可写,但只可运行HTML,就算黑客上传了网页木马,但由于该目录不允许asp等扩展运行,所以小马等于是白白上传了。
1.3 手动挂马的第三种方法是,网站使用了第三方的开源程序。(1)如果你的网站使用了一些网络上流传的一些开源程序,请一定要注意这些程序是没有上传漏洞和sql注入漏洞的,你可以在搜索引擎上利用“程序名+上传漏洞+sql注入”来搜索,看看这些程序是否有此类漏洞,并且要保持更新这些程序至最新版本。(2)请及时更改这些第三方程序默认的路径名、数据库路径名、数据库文件名。请注意不要将数据库的文件格式设为可下载的,这样容易被黑客猜到后下载,然后获得管理员的口令。
1.4其他一些小方法。
(1)因为很多网马都是利用iframe来达到“悄悄”被访问的,因此我们在编写网页程序的时候,就可以对iframe进行一个关键字的识别。例如,可以利用css的expression功能,在网页里加入以下代码:
这个方法,你可以在网络搜索到。这只是一个思路,小AV觉得,随着挂马方式的多样化,这种利用程序屏蔽的方法也会日渐增多。这个思路值得大家去效仿。
(2)当然,网页发布出去,是用来被访问和交互的。那其实很大部分文件是固定不变的,只有一些“数据”是在变化的。因此,我们可以将固定不变的文件的文件夹设为只读。对于经常更新的文件所在的文件夹设为可写。这样可以很大程度上防止被挂马。
(3)还有一些其他基本的rule,比如访问数据库的用户权限应该符合“需要什么,给予什么,绝不多给”,千万不可以sa全包……还有给予网站程序所在的文件夹的权限也应该是“能只读,就只读;需要可写再可写”。
(4)对于有条件的,可以买硬件防火墙,在路由器端再做一层防护。那是再好不过的了。
2 针对自动挂马。
自动挂马的原因就是服务器中了病毒,这些病毒还具有“识别网页文件,并自动加上一段挂马代码”的功能。鼎鼎大名的熊猫烧香就具有这样的功能跟。小AV在没做AV的时候,曾中过一次招,后来不得不重装系统,装好系统后,浏览了一次网页,发现又中招……几次反复以后,才发现原来是小AV手下的一台网站服务器中了熊猫烧香,访问这个网站当然就中招咯。
对于这种情况,那防毒自然是第一手要做的。选择好的杀毒软件、及时更新病毒码、及时打上系统补丁,这些都是最基本的。另外,限制服务器的使用,严格管理各个用户的权限,可以大大减少服务器中毒的几率。(如果能禁用U盘,限制网络访问的话,那就再好不过啦。汗~)
由于这部分其实侧重于防毒,小AV在这里就不多谈了。
3 事后处理
以上谈的都是如何预防被挂马,那万一没防住,小马被挂上了,应该怎么找出小马并及时消灭呢?
3.1 因为如果被挂马了,但是不去访问被挂马的网页,那其实这个小马还是属于沉睡状态,所以为了能够在小马苏醒之前,就将其消灭是十分重要的。因此,定时查看哪些只读文件被修改了,就十分重要。你可以对只读文件夹的文件按时间排序,看看哪些可疑。当然你也可以利用操作系统的“事件查看器”。另外,网络上也有类似字符串超找的工具,你可以用它们来查找关键字