有关本地客户端软件与服务器验证的问题

VsirSoft 2016-01-19 12:26:22


我想开发一个软件工具箱,软件工具箱的使用流程是:用户先从官方网站注册用户.用户数据存于mysql数据库中. 工具箱是PC客户端软件.想要使用里面的软件ABC必须先登陆工具箱主体软件.我的问题是

1.我在登陆用户的这个过程中,可能会有一些别有用心的人去破解我的软件.如果我直接在软件中连接数据库的话.一旦软件被破解.数据库账号密码即将暴露,数据库就会被盗取.这是最不安全的方法.所以不打算考虑了.还有一种方法是使用socket.但是我对这个东西完全没什么概念,服务端怎么写也不是很清楚.最后一种是用http的方式 post给服务器.WEB服务端取出数据库信息.返回给PC客户端.这里面肯定需要一个加密,在post给服务端的时候.验证的加密参数成功.才可以取到数据库的信息.否则如果被别人抓包到这个POST没有验证的话,会暴利不断的发送post包验证用户名和密码. 由于对这块接触较少.请各位帮我想一下具体的方案,最好是实例.不胜感激

2.软件工具箱中有三个软件工具.他们都是分别写成了一个EXE程序. 使他们运行需要满足一个条件 就是(软件工具箱.exe)登陆成功之后 才可以运行其他的(工具ABC.EXE)程序 .如果没有登陆.那么有些人可能会把工具箱文件夹里的工具拷贝到别的机器上去运行.这个时候打开EXE程序会提示"软件只可以从工具箱内部启动" 请问这个环节要怎么设计 我需要三个软件或者多个工具软件.exe都这样来执行.目前我想到的就是把他们放到一个DLL里面去验证. 一点思路没有

只能发100分别嫌少,诚心求助
...全文
298 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 8 楼 VsirSoft 的回复:
[quote=引用 7 楼 starfd 的回复:] token是服务端生成,然后返回给客户端的,然后服务端维护token的有效时间 具体你查下Oauth的实现逻辑就了解了
多谢版主,还想问一下 我通过抓包发现别的这个环节用的是443端口 他们那种方式是有什么益处么[/quote] SSL 是为了防止在通讯“中间”环节有人保存通讯内容。例如防止有人在 wifi 路由器上做手脚。 基本上,你不用太考虑这些。不过苹果公司总是特别善于用噱头来引领果粉,它的 ios9 系统据说自动将所有 http 请求都暗中改为 https 请求。这虽然会造成数十万应用在 ios9 上崩溃(不得不重新请求苹果公司审核应用、等待重新在apple store发布),但是苹果公司目前就是有这个资本把自己扮演为主宰者、上帝的角色。从这个超前的方面,也可以看到 https 虽然比 http 慢40%速度但是却有屌丝之处。
  • 打赏
  • 举报
回复
引用 3 楼 VsirSoft 的回复:
[quote=引用 2 楼 xhbmj 的回复:] 粗略的想法,仅供探讨
这个TOKEN要保存在哪里呢?? 工具箱主体和其他软件是不同的EXE文件 具体要怎么实施[/quote] TOKEN 叫做“授权码”,就跟你得到的短信验证码一样的东西。客户端软件在第一此访问服务器时,必须先登录,获得授权码,然后每一个业务请求都必须同时提供授权码,服务器如果需要验证客户端的真实身份就可以根据其授权码来验证。 通常会为所有的通讯信令(只有登录命名除外)都规定有一个授权码(或者叫SessionID,或者叫PassportID)字段。即使是通讯使用的不是明文而是加密了的,其解密之后也还是有它。因此用户授权跟消息是否加密无关,是逻辑基础。
  • 打赏
  • 举报
回复
引用 楼主 VsirSoft 的回复:
post给服务器.WEB服务端取出数据库信息.返回给PC客户端.这里面肯定需要一个加密,在post给服务端的时候.验证的加密参数成功.才可以取到数据库的信息.否则如果被别人抓包到这个POST没有验证的话,会暴利不断的发送post包验证用户名和密码
你不要求客户端先去登录吗?
VsirSoft 2016-01-24
  • 打赏
  • 举报
回复
希望有经验的人 能继续作答 目前没有太详细的答案
VsirSoft 2016-01-20
  • 打赏
  • 举报
回复
引用 7 楼 starfd 的回复:
token是服务端生成,然后返回给客户端的,然后服务端维护token的有效时间 具体你查下Oauth的实现逻辑就了解了
多谢版主,还想问一下 我通过抓包发现别的这个环节用的是443端口 他们那种方式是有什么益处么
zixingcheng_ 2016-01-20
  • 打赏
  • 举报
回复
看你软件值不值当吧,人家真想破解嘛,基本都是要失守的。
  • 打赏
  • 举报
回复
服务端有一套完整的服务接口,可以是WCF,也可以是WebAPI之类 用户需要先登录,登录完之后服务端返回一个token值,这个一般就是随机字符串或者guid码,反正保证唯一,而且不容易被尝试出来就行了,每次再请求时都要带上这个token
VsirSoft 2016-01-19
  • 打赏
  • 举报
回复
引用 2 楼 xhbmj 的回复:
粗略的想法,仅供探讨
这个TOKEN要保存在哪里呢?? 工具箱主体和其他软件是不同的EXE文件 具体要怎么实施
无爱大叔 2016-01-19
  • 打赏
  • 举报
回复
1、在服务端架设一个webservice服务,专门用来接收来自客户机的登录请求,验证通过返回true或者别的,你自己决定。 2、软件工具箱登录前无法看到软件a、b、c,登录后可见。登录后会得到一个token(规则算法你自己编),软件a启动时要验证token是否符合,符合才能打开,否则不能打开;这样可以避免工具箱和软件不在一起,并且未登录不能打开软件。 粗略的想法,仅供探讨
江南小鱼 2016-01-19
  • 打赏
  • 举报
回复
1.我在登陆用户的这个过程中,可能会有一些别有用心的人去破解我的软件.如果我直接在软件中连接数据库的话.一旦软件被破解.数据库账号密码即将暴露,数据库就会被盗取.这是最不安全的方法.所以不打算考虑了.还有一种方法是使用socket.但是我对这个东西完全没什么概念,服务端怎么写也不是很清楚.最后一种是用http的方式 post给服务器.WEB服务端取出数据库信息.返回给PC客户端.这里面肯定需要一个加密,在post给服务端的时候.验证的加密参数成功.才可以取到数据库的信息.否则如果被别人抓包到这个POST没有验证的话,会暴利不断的发送post包验证用户名和密码. 由于对这块接触较少.请各位帮我想一下具体的方案,最好是实例.不胜感激 可以考虑wcf、webservice,加上文件头验证
  • 打赏
  • 举报
回复
token是服务端生成,然后返回给客户端的,然后服务端维护token的有效时间 具体你查下Oauth的实现逻辑就了解了
VsirSoft 2016-01-19
  • 打赏
  • 举报
回复
有没有详细的方案的回答啊 大家回答的东西 基本上我在思路里已经说过了 第一个问题 使用WEBAPI接口怎么设计参数 客户端需要用户名和密码登陆 第二个问题 跟服务器传递数据的时候 使用什么加密方法做验证最安全 第三个问题 我没提到的东西好比"头文件验证" 是怎么样的详细方法 麻烦您回答完全 或者多给几句提示 第四个问题 软件ABC启动需要先登录,这个验证的key是存放于哪里比较合适 第五个问题 软件ABC找到这个key才能启动 如何防止被破解过滤掉这个key直接启动 第六个问题 防止破解的方法 具体讲述一下 尽量不要只用三五个字代替 谢谢大家了 您的回答可能还会帮助以后其他人
VsirSoft 2016-01-19
  • 打赏
  • 举报
回复
引用 4 楼 starfd 的回复:
服务端有一套完整的服务接口,可以是WCF,也可以是WebAPI之类 用户需要先登录,登录完之后服务端返回一个token值,这个一般就是随机字符串或者guid码,反正保证唯一,而且不容易被尝试出来就行了,每次再请求时都要带上这个token
如果程序被破解了 这个token的算法不就在程序里么? 得到了这个算法 还是会获取我的数据库里面的信息 我是想问这个token怎么生成会比较安全

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧