Python 发表于 2016-7-15 04:20:01

Python GUI 编程 QtWebKit.QWebPage.userAgentForUrl(url) 无限死循环漏洞

Python GUI 编程 QtWebKit.QWebPage.userAgentForUrl(url) 无限死循环漏洞

这段时间搞 GUI 界面编程,除遇到一些常见小问题外,还有一种比较难发现的死循环问题。
这种不太常见的死循环问题,从代码角度和语法上看,一点问题也没有,但运行时,就可能是您程序的恶梦。当然,你自已弄出来的一些死循环也会有,但 IDE 会提示。
此处要说的,是 IDE 根本发现不了,也不会提示的程序源代码陷井。
此处要说一说 QtWebKit.QWebPage.userAgentForUrl(url) 函数,当 HTTP 请求用户代理时,此函数会返回 URL 用户代理 "字符串信息"。

User-Agent 英文简称 UA,中文译为 “用户代理”。User-Agent 是 HTTP 协议的一部分,属于请求头域。
User-Agent 是向访问网站提供所用浏览器类型及版本、操作系统及版本、CPU 类型、浏览器渲染引擎、浏览器语言、浏览器插件、等信息的一特殊字符串头标识。
User-Agent 字符串在每次浏览器进行 HTTP 请求时,会被发送到服务器!
某些网站常通过判断 User-Agent 来给不同操作系统、不同浏览器发送不同页面;因此,可能造成某些页面无法在某个浏览器中正常显示,但通过伪装 User-Agent 可绕过此种检测。
user-agent 作用
01、统计用户浏览器使用情况。有些浏览器说被多少人使用了,实际上就可通过判断每个IP 的 UA 来确定这个 IP 是用什么浏览器访问的,以得到使用量的数据。
02、根据用户使用浏览器的不同,显示不同的排版从而为用户提供更好的体验。有些网站会根据这个来调整打开网站的类型,如是手机就打开 wap,非手机的就打开 pc 常规页面。用手机访问谷歌和电脑访问是不一样的,这些是谷歌根据访问者的 UA 来判断的。

03、伪装 user agent 以回避某些侦测特定浏览器才能读取的网站。如使用 Firefox 浏览器插件 User agent switcher,用户可轻松在不同 UA 之间切换,把自己伪装成其他浏览器。这样就可在 PC 上预览 WAP 或移动格式的网页,譬如:专为 iPhone 设计的页面。
user-agent 值
ASP.NET 使用 Request.Header["User-Agent"] 或 Request.UserAgent
Java 使用 request.getHeader(”User-Agent”)
Python 使用 Request.headers.get("User-agent")
PHP 使用:$_SERVER;
JS 使用 navigator.userAgent
QtWebKit.QWebPage.userAgentForUrl(url) 函数
以下是正确代码形式:
def userAgentForUrl(self, url):
    return user_Agent
以下是可能会出现死循环的代码形式:
def userAgentForUrl(self, url):
    p= N_Class()

    if c == "32bit":
      user_Agent = p.a

    else:
      user_Agent = p.b
   
    return user_Agent
http://forum.digitser.cn/data/attachment/forum/201605/19/132155fevczeyds5e5y1wy.jpg
请关注 "德云社区" 及其微信公众号,了解相关资讯

版权声明:
本文为独家原创稿件,版权归 德云社区,未经许可不得转载;否则,将追究其法律责任。

页: [1]
查看完整版本: Python GUI 编程 QtWebKit.QWebPage.userAgentForUrl(url) 无限死循环漏洞