iteye_2134 2009-06-24 12:33
浏览 258
已采纳

求高手:客户端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 2009-06-24 17:08
    关注

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

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集