如何制作网页安全登录控件(Demo)

标签: 前端开发 NPAPI 制作 安全登录控件 插件 | 发表时间:2011-12-20 08:30 | 作者:DLive
出处:http://ued.ctrip.com/blog

好久没写文章了,都忘了怎么磨墨了。

什么是安全控件和安全控件如何安全这不是本文要讨论的范围。

本文只讲述如何在网页里嵌入windows edit control 控件。

PS:关于安全控件的安全:

1.防止数据被抓包的方法:

  • 用驱动截获键盘事件.
  • 模拟键盘事件发送垃圾数据.

2.保证被抓包的数据安全的方法:

  • 进行数据加密,比如用安全证书进行加密(会被破解??,好!用另一个方法:推卸责任给安全证书)

3.传输安全:采用SSL进行通讯。

以上3点的实现请参见书籍《下辈子》作者:DLive

我们将用Firefox提供的NPapi SDK编写插件。

整个插件的关键点如下:

  1. 内嵌对话框的属性设置。
  2. 对话框的创建。
  3. windows的消息循环。

整个过程如下:

1.创建空DLL项目命名为npsafeinput

设置character set

www.ctrip.com

output file

www.ctrip.com

2.从NPAPI SDK (版本1.92)提取必要的文件到项目文件内,并添加到项目里

npapi.h
np_entry.cpp
npn_gate.cpp
npruntime.h
nptypes.h
从官方的例子中提取两个文件
plugin.h
plugin.cpp

3.设置项目的属性

                  character set 设为:multi-byte
                  output file设为:Firefox 的plugins 目录(方便调试)

4.给项目添加vertion。

记得更改blockHeader为:040904e4
添加MIMEType: application/npsafeinput

设置MIMEType

设置MIMEType

5.添加导出接口

先添加npsafeinput.def
文件内容如下:

LIBRARY "npsafeinput"
         EXPORTS
              NP_GetEntryPoints   @1
              NP_Initialize       @2
              NP_Shutdown         @3

OK! 烦琐的东西已告一段落,下面进入主题

关键代码用红色显示。

6.添加windows对话框。

打开属性面板设置他的属性如下:
        Broder:None,               //为什么就不说了
        Style:Child,                   //这关系到他在页面中的位置
Visble:True,                //..
ID:IDD_INPUT

7.向对话框中添加edit control    并设置属性:

ID:IDC_INPUT
Passrord:true        //根据自己需要

8.编写对话框类

//DLDialog.h  (略)
//DLDialog.cpp 关键内容如下

bool DLDialog::create(HINSTANCE hlnstance,LPCTSTR lpTemplate,HWND hWndParent)
{
hWnd=CreateDialog(hlnstance,lpTemplate,hWndParent,(DLGPROC)DlgProc);
        if(!hWnd){
                return false;
        }
        return true;
}
bool DLDialog::show()
{
          ShowWindow(hWnd, SW_SHOW);
          return true;
}
INT_PTR CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
break;
case WM_SIZE:{
RECT rc;
GetClientRect(hDlg,&rc);
HWND pitem=GetDlgItem(hDlg,IDC_INPUT);
SetWindowPos(pitem,HWND_TOPMOST,0,0,rc.right,rc.bottom,SWP_NOZORDER|SWP_NOMOVE);
           //控制输入控件随窗口的改变而改变大小
         }
}
return false;  //不要使用DefWindowProc 上默认处理消息。这样会让你的程度提前去世

9.为Cplugin类添加一些成员变量

           DLDialog *cinput;     //对话框类指针
            bool createInput();  //导出接口
            int m_width;                 //安全控件的宽高
            int m_height;            

10.在插件的消息循环中把消息也传给对话框:不然会导致一些异常情况发生。比如输入法的切换无效。

static LRESULT CALLBACK PluginWinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
             .......
                 CPlugin * p = (CPlugin *)GetWindowLongPtr(hWnd, GWLP_USERDATA);
 if(p->cinput!=NULL)
SendMessage(p->cinput->hWnd, msg, wParam, lParam);      //向对话框传输消息               return DefWindowProc(hWnd, msg, wParam, lParam);
}

11. 在插件创建的时候读取要设置的宽高

NPError NPP_New(NPMIMEType pluginType,NPP instance, uint16_t mode, int16_t argc,char* argn[],char* argv[],NPSavedData* saved)
{
 ...........
          for(int i=0;i<argc;i++)
          {
                   if(strcmp(argn[i],"width")==0){            //读取宽
                    int tmp=atoi(argv[i]);
                    pPlugin->m_width=tmp;
           }
           else if(strcmp(argn[i],"height")==0){     //读取高
                    int tmp=atoi(argv[i]);
                    pPlugin->m_height=tmp;
           }
  }
........
}

12.调用接口函数:

bool CPlugin::createInput()
{
         if(!cinput){
                  cinput=new DLDialog();
                  cinput->create(GetModuleHandle("npsafeinput.dll"),MAKEINTRESOURCE(IDD_IINPUT),this->m_hWnd); //创建对话框注意GetModuleHandle("npsafeinput.dll") 不然对话框显示不了。
         }
         cinput->show();
         if(!SetWindowPos(cinput->hWnd,HWND_TOPMOST,100,0,m_width,m_height,SWP_NOZORDER|SWP_NOMOVE))
                  MessageBox(NULL,"error","error",0);
         return true;
}

13.如何导出接口(略)

14.网页代码   注意设置宽高

<embed id="objinput" type="application/npsafeinput" width=300 height=25 ><br>
<script>
var embed1 = document.getElementById('objinput');
function ctrip(){
 embed1.createInput();
}
</script>
<br>
<input type=button value="携程 demo" onclick='ctrip();'>

15最终结果如下:

www.ctrip.com

OK 现在整个demo已经完成了。该demo适用于支持NPAPI的浏览器。IE靠边站。

整个代码写得很粗糙。目的只是讲述一个过程。
DEMO下载地址

有什么错误的地方请指出,多谢多谢

相关 [制作 网页 安全] 推荐:

如何制作网页安全登录控件(Demo)

- - 携程UED
好久没写文章了,都忘了怎么磨墨了. 什么是安全控件和安全控件如何安全这不是本文要讨论的范围. 本文只讲述如何在网页里嵌入windows edit control 控件. PS:关于安全控件的安全:. 模拟键盘事件发送垃圾数据.. 2.保证被抓包的数据安全的方法:. 进行数据加密,比如用安全证书进行加密(会被破解.

如何用Paper.js制作网页动画

- - HTML5研究小组
导读:在很长一段时间内,网页动画是有GIF和Flash主导的,他们会有一个独立于页面其他元素的板块,而不是像文字和图像那样自然地呈现. 这个 直到HTML5 Convas(画布)出现,一切都改变了. canvas 把动画和手绘自然地融入到网页设计中. 你可以把动画和文字结合起来并让他们互动. 动画的效果变好了,编译是否也能简化.

20个优秀的 Photoshop 网页制作教程

- 自乐 - 博客园-首页原创精华区
  曾经和大分享过几篇优秀的 Photoshop 网页设计教程,喜欢的人非常多. 今天这篇文章继续向大家分享最新20个优秀的 Photoshop 网页制作教程. 其实,网页设计并没有你想的那么难,相信看完这些教程,你也可以设计出漂亮的网页. 最新31个非常棒的Photoshop网页设计教程. 分享30个优秀的Photoshop网页设计教程.

Google发布Chrome网页安全检测工具DOM Snitch

- zou guangxian - 36氪
Google今天发布了一个名为DOM Snitch的开源工具,可以帮你找出网站上的恶意软件. 这个工具是一个Chrome扩展,可以检查网站的代码执行情况,看是否有命令可以导致跨站脚本和其他通过网页浏览器发起的攻击行为. Google表示DOM Snitch可以帮助开发者和测试人员发现潜藏在客户端代码里的非安全惯例.

Android应用安全开发之浅谈网页打开APP

- - WooYun知识库
Author:伊樵,呆狐,舟海@阿里移动安全. 0x00 网页打开APP简介. Android有一个特性,可以通过点击网页内的某个链接打开APP,或者在其他APP中通过点击某个链接打开另外一个APP(AppLink),一些用户量比较大的APP,已经通过发布其AppLink SDK,开发者需要申请相应的资格,配置相关内容才能使用.

推荐13款优秀的网页线框图设计和制作工具

- - 博客园_梦想天空
  当你开始做一个项目的时候,用线框图把你的想法勾勒出来非常重要. 这是你把想法变成际成果的必要步骤,通过绘制线框图原型才能决定怎么样做更合理. 今天这篇文章收集了13款超级有用的优秀网页线框图工具分享给大家,这些工具能够帮助你做出优秀的线框图. 12款很棒的浏览器兼容性测试工具推荐. 推荐10款非常优秀的HTML5开发工具.

[来自异次元] 在线 LaTeX 公式编辑器网页版 (轻松制作出各种数学、物理、化学公式图片)

- Chyi - 异次元软件世界
大家是否都曾有在百度、问问等问答频道提问或者回答数理化问题的经历呢. 或者在工作、学习期间,需要在网上交流一下数学公式. 相信有过类似需求的朋友都会发现,想要在电脑上制作一个复杂一点的公式,有时还真有点无从入手. 你是否像笔者一样在为输入繁琐复杂的数学公式而烦恼. 亦或是想展现自己的解题技艺却在输入复杂的公式时望而却步.

模型制作

- 小鱼儿 - 非正常人类研究中心 – Mtime时光网
1.材料:一大袋的一次性筷子(花了60块钱);5支502胶水;5张粗砂纸;记号笔一只;锋利的美工刀片若干,破剪刀一把. 就是这种屌毛筷子,质量也太他妈的差了点,80%都是弯的 . 随便提一下:我的脚丫子还是蛮性感滴 . 开始动工了!!  先做门框跟房子的底架. 3.不好意思,忘了交代一下了,我是先画图纸的,看到那张纸了没有.

谁更安全?

- iceman.yu - 比特客栈的文艺复兴
原文:The triumph of coal marketing – Seth Godin. 翻译+整理:David Frank. 你对核能发电是不是也有一些看法. 相比其他的发电方式,它们谁更安全. 数据来自这里,图片来自这里,上图是一幅毫不夸张的数据简化图. 同样的发电量,每当核能发电误杀一个人,煤炭发电会导致4,000人的死亡.

网络安全

- - CSDN博客系统运维推荐文章
1、防止入侵者对主机进行ping探测,可以禁止Linux主机对ICMP包的回应.  iptables 防火墙上禁止ICMP应答.  关闭不必要的端口,时常检查网络端口情况.  nmap  可以扫描端口.  关闭不必要的服务和端口.  为网络服务指定非标准的端口.  开启防火墙,只允许授权用户访问相应的服务端口.