版权所有 2009-2014 荆门泽优软件有限公司
保留所有权利
产品博客:http://www.cnblogs.com/xproer/
官方网站:http://www.ncmem.com
产品首页:http://www.ncmem.com/webplug/passwordeditor/index.asp
在线演示:http://www.ncmem.com/products/passwordeditor/demo/index.html
开发文档:http://www.cnblogs.com/xproer/archive/2011/11/27/2264969.html
产品介绍:http://www.cnblogs.com/xproer/archive/2011/11/27/2264971.html
升级日志:http://www.cnblogs.com/xproer/archive/2011/11/27/2264965.html
资源下载:cab安装包(x86),cab安装包(x64),crx安装包,xpi安装包,exe安装包,开发文档,VC库,证书补丁,
联系信箱:1085617561@qq.com
联系QQ:1085617561
更新记录:
更新时间 |
描述 |
2014-07-18 |
修改资源链接 |
如何防止密码被盗取
用户在输入密码时,控件内部会启动一个安全进程向密码框发送一个随机字符来干扰木马程序,
在取密码文本时控件会对进程进行识别,只有当前进程才被允许取出密码文本。
与服务器通信
密码控件会采用独立的安全连接(HTTPS)与服务器通信,在通信前会首先对密码进行加密,然后再将加密的密码发送给服务端,服务端验证后返回验证结果。
控件在内部使用密钥对密码进行加密然后提交给服务端,服务端根据密钥对用户密码加密后进行比较,如果相同则表示用户密码正确。
1.修改Posturl
主要步骤:
1.上传控件相关的文件。
2.修改cab文件下载地址及classid序列号。
3.修改控件上传地址及编码。
SafeEditor.js
SafeEditor.cab
SafeEditor64.cab
SafeEditor.crx
SafeEditor.xpi
SafeEditor.exe
注意:
请不要手动解压SafeEditor.cab文件,请此文件上传到服务器中,IE浏览器会自动下载并安装控件。cab文件是一个控件自动安装包。
打开SafeEditor.js文件查找以下代码,修改Clsid,ProjID,Clsid64,ProjID64,MimeType,CrxName,MimeTypeChr的值和插件包地址。
this.Config = {
"PostUrl" : "http://www.ncmem.com/check.aspx"
, "EncodeType" : "utf-8"
, "EncryptionType": "md5"//加密类型:md5,base64
, "Company" : "荆门泽优软件有限公司"
, "Version" : "1,1,8,21165"
, "License" : ""
, "Debug" : false//是否打开调试模式
, "LogFile" : "F:\\log.txt"//日志文件路径
, "Clsid" : "E
, "ProjID" : "Xproer.SafeEditor"
, "CabPath" : "http://www.ncmem.com/download/SafeEditor/SafeEditor.cab"
//IE64
, "Clsid64" : "B9D7B
, "ProjID64" : "Xproer.SafeEditor64"
, "CabPath64" : "http://www.ncmem.com/download/SafeEditor/SafeEditor64.cab"
//FireFox
, "MimeType" : "application/npSafeEditor"
, "XpiPath" : "http://www.ncmem.com/download/SafeEditor/SafeEditor.xpi"
//Chrome
, "CrxName" : "npSafeEditor"
, "MimeTypeChr" : "application/npSafeEditor"
, "CrxPath" : "http://www.ncmem.com/download/SafeEditor/SafeEditor.crx"
, "ExePath" : "http://www.ncmem.com/download/SafeEditor/SafeEditor.exe"
};
说明:
classid是唯一的,它的作用是避免与其它公司的控件产生冲突。购买产品后我们会为每个公司生成一个唯一的classid号。
codebase也可以使用相对路径。如果SafeEditor.cab在Web服务器的根目录中,codebase也可以写为/SafeEditor.cab#version=1,4,8,45272
如果公司的域名是www.qq.com,SafeEditor.cab文件在服务器的根目录中,那么codebase应该为http://www.qq.com/SafeEditor.cab#version=1,4,8,45272。每个公司应该将codebase改为自已服务器的地址。
注意:
当控件升级(版本号修改)或CAB文件位置改变,必须修改SafeEditor.js中的代码。否则用户的IE浏览器不会安装最新的控件。
打开index.html,将PostUrl改为实际的上传地址:
pwdEditor.Config["PostUrl"] = "http://www.ncmem.com/products/passwordeditor/demo/check.aspx";
说明:
如果需要在多个页面使用安全控件,建议只在PasswordEditor.js中修改上传地址。而不要在前台页面中修改。这样可以使前台引用安全控件的代码更加简洁。
注意:
PostUrl必须使用绝对路径,不能使用相对路径。下面的路径都是错误的:
/upload.php
/web/check.php
主要步骤如下:
1.将测试包上传到测试服务器中。如果测试服务器在本地,则不用上传。
测试包说明如下:
IE(x86)插件安装包:SafeEditor.cab
IE(x64)插件安装包:SafeEditor64.cab
Firefox插件安装包:SafeEditor.xpi
Chrome插件安装包:SafeEditor.crx
2.修改测试服务器中的SafeEditor.js配置信息。
将插件包地址改为测试服务器地址。
1.将正式包上传到测试服务器中。
IE(x86)插件安装包:SafeEditor.cab
IE(x64)插件安装包:SafeEditor64.cab
Firefox插件安装包:SafeEditor.xpi
Chrome插件安装包:SafeEditor.crx
插件集成安装包:SafeEditor.exe
2.修改正式服务器中的SafeEditor.js配置信息。
一般情况下,控件升级后SafeEditor.cab会更新,同时版本号也会更新。
主要步骤如下:
1. 重新上传SafeEditor.cab文件。
2. 更新SafeEditor.js中的版本号。
打开SafeEditor.js文件,将版本号改为最新的版本号。最新版本号一般在邮件中提供。
this.Config = {
"PostUrl" : "http://www.ncmem.com/check.aspx"
, "EncodeType" : "utf-8"
, "EncryptionType": "md5"//加密类型:md5,base64
, "Company" : "荆门泽优软件有限公司"
, "Version" : "1,1,8,21165"
, "License" : ""
, "Debug" : false//是否打开调试模式
, "LogFile" : "F:\\log.txt"//日志文件路径
, "Clsid" : "E
, "ProjID" : "Xproer.SafeEditor"
, "CabPath" : "http://www.ncmem.com/download/SafeEditor/SafeEditor.cab"
//IE64
, "Clsid64" : "B9D7B
, "ProjID64" : "Xproer.SafeEditor64"
, "CabPath64" : "http://www.ncmem.com/download/SafeEditor/SafeEditor64.cab"
//FireFox
, "MimeType" : "application/npSafeEditor"
, "XpiPath" : "http://www.ncmem.com/download/SafeEditor/SafeEditor.xpi"
//Chrome
, "CrxName" : "npSafeEditor"
, "MimeTypeChr" : "application/npSafeEditor"
, "CrxPath" : "http://www.ncmem.com/download/SafeEditor/SafeEditor.crx"
, "ExePath" : "http://www.ncmem.com/download/SafeEditor/SafeEditor.exe"
};
说明:
更新版本号后,IE会自动提示用户安装最新的控件。
<script type="text/javascript" language="javascript">
var pwdEditor = null;
window.onload = function() {
pwdEditor = new PasswordEditor();
//设置数据上传地址
pwdEditor.Config["PostUrl"] = "http://localhost:1830/asp.net/check.aspx";
}
</script>
注意:
PostUrl必须使用绝对路径,不能使用相对路径。下面的写法都是错误的。
manager.Config["PostUrl"] = "/asp.net/check.aspx";
manager.Config["PostUrl"] = "/php/check.php";
manager.Config["PostUrl"] = "/jsp/check.jsp";
目前安全控件支持MD5及BASE64加密方式。
<script type="text/javascript" language="javascript">
var pwdEditor = null;
window.onload = function() {
pwdEditor = new PasswordEditor();
//设置数据上传地址
pwdEditor.Config["EncryptionType"] = "md5";
}
</script>
<script type="text/javascript" language="javascript">
var pwdEditor = null;
window.onload = function() {
pwdEditor = new PasswordEditor();
//设置服务器编码方式,支持GB2312/UTF-8
pwdEditor.Config["EncodeType"] = "GB2312";
}
</script>
//事件-传输完毕
function PasswordEditor_Complete(obj)
{
obj.State = ScreenCaptureState.Complete;
var msg = obj.ATL.Response;
//添加其它的处理代码
}
附加信息的作用就是在上传图片的同时向服务器提交额外的字段信息。比如当用户向服务器上传截图时,服务器需要知道是哪位用户上传的截图,这时可以将用户ID添加到附加信息中,这样服务器在获取截图信息的同时也能够根据附加信息知道是哪位用户上传的截图。
客户端:
pwdEditor.Fields["UserName"] = "test";
服务端:
string fname = Request.Form["UserName"];
开发人员可以根据自已的业务需求来扩展附加信息:
客户端:
pwdEditor.Fields["f1"] = "f1";
pwdEditor.Fields["f2"] = "f2";
pwdEditor.Fields["f3"] = "f3";
pwdEditor.Fields["f4"] = "f4";
pwdEditor.Fields["f5"] = "f5";
服务端(ASP.NET):
string f1 = Request.Form["f1"];
string f1 = Request.Form["f2"];
string f1 = Request.Form["f3"];
string f1 = Request.Form["f4"];
string f1 = Request.Form["f5"];
以ASP.NET项目为例。在ASP.NET项目中修改服务器的编码格式是根据web.config中的设置确定的。
<globalization requestEncoding="utf-8" responseEncoding="utf-8"/>
打开web.config文件,修改下面的字段信息。
manager.Config["EncodeType"] = "UTF-8";//注意,此格式必须与服务器端的设置对应。默认为UTF-8
manager.Config["PostUrl"] = "http://localhost:1595/check.aspx";
ASP.NET(C#)
public partial class upload : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string name = Request.Form["UserName"];
string pass = Request.Form["Password"];
}
}
类型:JavaScript
WEB安全控件包装类。此对象封装了控件的加载功能,并提供控件信息配置及管理功能。
开始上传数据。
语法
void Post();
上传数据时附加的额外信息。
注意:此属性暂时不支持中文字符串。
以下示例演示上传时添加用户名和密码的额外信息:
var pwdEditor = new PasswordEditor();
pwdEditor.Fields["UserName"] = "test";
pwdEditor.Fields["UserPass"] = "test";
提供全局配置信息。
语法:
this.Config = {
"EncodeType" : "UTF-8"
,"PostUrl" : "http://www.ncmem.com/check.aspx"
};
服务器编码方式。
此属性必须和web.config配置文件对应。
如果服务器端编码方式是UTF-8
<globalization requestEncoding="utf-8" responseEncoding="utf-8"/>
则客户端也必须是UTF-8
var pwdEditor = new PasswordEditor();
pwdEditor.Config["EncodeType"] = "UTF-8";
如果服务端编码方式是GB2312
<globalization requestEncoding="gb2312" responseEncoding="gb2312"/>
则客户端也必须是GB2312
var pwdEditor = new PasswordEditor();
pwdEditor.Config["EncodeType"] = "GB2312";
处理上传数据的URL。
CLSID:B10327CB-56EC-43D9-BED0-C91E4AE8F42E
类型:ActiveX
安全控件。整合了向服务器验证的功能。支持SSL安全协议。
向服务器发送数据。
以下代码是控件向服务器提交的数据。
Content-Disposition: form-data; name="title"\r\n\r\n
用户名称\r\n
Content-Disposition: form-data; name="Password"\r\n\r\n
用户密码\r\n
开发语言:ASP.NET(C#)
.NET框架:2.0
说明:PasswordEditor控件是使用标准HTTP FORM方式上传的,所以如果服务器是使用的其它语言,例如PHP,JSP使用相应的HTTP FORM方式处理接受数据即可以。
说明:如果需要上传大文件,则需要修改httpRuntime中的maxRequestLength属性值。同时还需要修改executionTimeout值。
requestEncoding值和控件的编码必须保持一致,否则服务器接受上传文件名称会出现乱码。
<system.web>
<globalization requestEncoding="utf-8" responseEncoding="utf-8"/>
<!--<globalization requestEncoding="gb2312" responseEncoding="gb2312"/>-->
</system.web>
ASP.NET(C#)
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Text;
namespace WebApplication1
{
public partial class upload : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string name = Request.Form["UserName"];
string pass = Request.Form["Password"];
//验证成功返回:1,失败返回:0
Response.Write("1");
} }
}
Web平台:Apache Tomcat 6
配置步骤:
1.将upload.war放到Tomcat 6 的 webapp目录中。
例如下列目录:C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps
2.重启Tomcat 6服务
3.修改ScreenCapture.html中PostUrl地址,一般情况为 http://127.0.0.1:8080/upload/upload.jsp
4.在IE中打开ScreenCapture.html开始测试。
JSP示例是使用的SmartUpload来实现的,可以通过下面的方式获取附加字段
mySmartUpload.getRequest().getParameter();
完整代码如下
SmartUpload su = new SmartUpload();
su.initialize(pageContext);
su.setMaxFileSize(1024000);//1M
su.setTotalMaxFileSize(1024000);
su.setAllowedFilesList("jpg,JPG,Jpg,jPg,jpG,JPg,jPG,jPg,gif,GIF,gIf,Gif,GIf,gIF,giF,gIf,bmp,BMP,Bmp,BMp,bMP,bmP,BmP,bMp");
su.setDeniedFilesList("exe,bat,jsp,htm,html,asp,");
su.upload("utf-8");
String id = (String)su.getRequest().getParameter("id");//新增的时候可以接收,但修改时为null
String sortNum=(String)su.getRequest().getParameter("sortNum");//新增的时候可以接收,但修改时为null
upload.php
<?php
ob_start();
$uploadDir = dirname(__FILE__).'/upload';
//自动创建目录
if(!file_exists($uploadDir)){
mkdir($uploadDir);
}
//取时间字符串,格式:_09_09_时分秒毫秒
$time = date("Y_m_d_His") . floor(microtime() * 10000);
//如果PHP页面为UTF-8编码,请使用urldecode解码文件名称
//$fileName = urldecode($_FILES['img']['name']);
//如果PHP页面为GB2312编码,则可直接读取文件名称
$fileName = urldecode($_FILES['img']['name']);
$tmpName = $_FILES['img']['tmp_name'];
//取文件扩展名jpg,gif,bmp,png
$path_parts = pathinfo($fileName);
$ext = $path_parts["extension"];
//年_月_日_时分秒毫秒.jpg
$saveFileName = $time . '.' . $ext;
//xxx/2011_05_05_091250000.jpg
$savePath = $uploadDir . "/" . $saveFileName;
//另存为新文件名称
if (!move_uploaded_file($tmpName,$savePath))
{
exit('upload error!' . "文件名称:" .$fileName . "保存路径:" . $savePath);
}
//输出图片路径
//$_SERVER['HTTP_HOST'] localhost:81
//$_SERVER['REQUEST_URI'] /FCKEditor2.4.6.1/php/test.php
$reqPath = str_replace("upload.php","",$_SERVER['REQUEST_URI']);
echo $reqPath . "upload/" . $saveFileName;
header('Content-Length: ' . ob_get_length());
?>
<%
Option Explicit
Response.Buffer=True
%>
<!--#include file="UpLoadClass.asp"-->
<%
dim lngUpSize,uploader,intError
Set uploader = new UpLoadClass
uploader.TotalSize= 10485760'10MB
uploader.MaxSize = 10000*1024
uploader.FileType = "gif/jpg/png/bmp/pdf/doc/xls/rar/zip/txt"
uploader.Savepath = "upload/"
'自动创建上传文件夹
dim folder,fs
folder = server.MapPath(uploader.Savepath)
set fs = Server.CreateObject("Scripting.FileSystemObject")
if(fs.FolderExists(folder) = false) then
fs.CreateFolder(folder)
end if
lngUpSize = uploader.Open()
intError = uploader.Form("photo2_Err")
'输出文件名称和路径:-09-10-5-52-255252.jpg'
response.Write("upload/" & uploader.Form("ServerFileName"))
if lngUpSize>uploader.MaxSize then
%>
<script language="javascript">
<!--
alert("您上传的文件最大不能超过M!!");
history.back();
//-->
</script>
<%
response.end
end if
if intError=-1 then
%>
<script language="javascript">
<!--
alert("您没有上传任何文件,请重新上传!!");
history.back();
//-->
</script>
<%
response.end
end if
Set uploader = nothing
%>