web服务器不能正常发送短信

                       

网站注册,用户获取验证码失败,经过网站开发兄弟提醒,研究了下fsockopen()等函数,现摘要如下

Fsockopen()

(PHP4,PHP5)

用于打开一个网络链接或一个unix套接字链接。

也就是说,既然此函数会参与短信API收发,那么就有可能该函数打开了一个unix套接字链接,此时网站开发的兄弟亦证实了这点。

于是我马上想到很有可能是采用了三种套接字类型中的流套接字(sock_stream)。那么就会产生3次握手。于是用iptables命令发现,交互包被防火墙drop掉了。但是仅到此,问题才解决了一小部分而已,因为我们还要抓取端口,以便制定相应的防火墙规则。

 

我们先看下web服务器发送短信的流程

技术分享

根据流程图,我们很容易看出有可能出现问题的地方,我们做下标记

技术分享

因此我们在这两个地方抓包,首先是用户与web server交互之处,抓包情况如下

技术分享

我们很轻易的就观测到,在用户申请验证码阶段,用的80端口,这对于web服务器来说,是不可能被drop掉的,此处排除。

接着,我们在服务器上抓包

技术分享

技术分享

发现,服务器访问短信网站API时候采用的是80端口,而服务器自己则是随机分配的一个端口,所以被防火墙drop掉了。因此需调试防火墙规则。

故障排除。

 

思考:由此我们是不是可以猜测,但凡此类短信注册网站是否都会有此bug。也许是我对iptables理解有限,据我目前所知,无论是定位源或目,或者再狠点,两者都一并限定了,都是会随之开放比较大的权限,相应的也会是网站防御的薄弱处之一。

若有思考有误,欢迎大家来吐槽!

 

END


本文出自 “百折不回” 博客,请务必保留此出处http://changbo.blog.51cto.com/1316452/1633299

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。