现在的结构是:服务端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的热心回复!