iteye_2134
2009-06-24 12:33 阅读 233
已采纳

求高手:客户端application访问服务端Servlet安全问题

现在的结构是:服务端Servlet提供服务,客户端向这个servlet发出请求后响应。
现在的问题是,如何让一些非法的客户端(攻击者修改代码后重新打包的jar文件)不能正常访问到这个servlet?
比如:只能我自己用(.keystore文件)签名的Client.jar客户端才可以建立与servlet的连接,攻击者下载Client.jar 反编译修改后重新打包,
但是没用我的(.keystore文件)签名,就不能与服务器上的Servlet通信,或者Servlet拒绝?
现在没用一个明确的概念,用SSL也无法实现,难道这是个无法解决的问题吗?

[color=darkred]补充1:
服务器上提供Client.jar文件下载,客户下载后运行此程序访问指定的Sevlet。
非法用户指的是:自己反编译Client.jar文件,修改一些内容后再打包为一个jar文件,访问同样的Servlet,这就是非法访问。
因为客户端jar文件不是原先的程序了。
你说的服务端检查客户端的Client.jar文件怎么实现?如果只是提取了Client.jar文件中的相关签名信息,
然后在与Servlet建立连接的时候传递过去,那攻击者完全客户获取这个标识号,服务端还得认同此次连接。。。[/color]

[color=orange]补充2:
Client.jar文件加密是个办法,不过不是最好的办法。
客户端安装USB硬件狗应该也不能解决问题,
因为攻击者可以反编译代码后仿效依然可以在自己的程序中正确运行的。
攻击者的特点:
1、是合法用户,意味着用户名、密码可以通过服务端检验。
2、基本上可以反编译出客户端程序代码(通过反编译Client.jar文件实现)。
3、如果只是简单的客户端加码,则攻击者可以在新程序中仿照Client.jar中的解密方法,
包括读取一些特定的标识符等等(USB KEY, 客户端随机码加密等等)。。。
要求:
只是本人签名过的jar文件可以访问服务端,其他任何没有本人签名或者被修改过的jar程序不可访问服务端。 [/color]

[b][color=orange]求高手支招![/color][/b]

[b]问题补充:[/b]
是这样的,我们的程序客户端采用swing写界面,与服务端servlet通信,
查询数据、是否有某个功能权限等都是在客户端做的。
如果攻击者修改了程序逻辑的话, 他可能把sql中的where条件去掉,
那么就是不该看到一些数据了啊。。。
另外,如果再修改判断是否有权限的逻辑, 那么就是都有权限了啊。。。

其实,我也知道想要达到这个要求可能比较困难, 就是看看有没有高手遇到过类似的问题。。。

感谢grandboy的热心回复!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • 已采纳
    iteye_8658 iteye_8658 2009-06-24 17:08

    [b]只是本人签名过的jar文件可以访问服务端,其他任何没有本人签名或者被修改过的jar程序不可访问服务端。[/b]

    为什么会有这样的需求? 为什么非得用你自己的client.jar才能访问? 别人如果改了你里面的逻辑然后访问你的servlet, 会出现什么问题?最好能举例说明。

    我觉得必须要求你的签名过的jar文件才能访问, 这个要求应该是没有办法做到, 至少我是不会的。另外我也确实想不出你为什么有此需求。本来servlet就是要通过http(s)来访问的,别人应该能通过任何支持http访问的工具(包括自己写的程序)来访问的。

    点赞 评论 复制链接分享
  • iteye_8658 iteye_8658 2009-06-24 20:37

    我觉得你们的程序设计得有些问题。怎么会把取重要数据的逻辑(SQL)放在客户端?取权限的逻辑也不适合放在客户端。如果是用Ajax做客户端的话,这样做逻辑,那后果不可想像。

    当然你们的程序可能是历史遗留下来的。既然已经这样做了,可能也没有办法修改了。这个回复就当是帮你顶了。 :)

    点赞 评论 复制链接分享
  • panyi5202 panyi5202 2009-06-26 13:08

    如grandboy 兄所说,其实你这个需求在现实中肯定是不应该存在的,若只是不想让人看到你客房端的代码,可用混淆技术使代码不能反编译。

    点赞 评论 复制链接分享

相关推荐