java项目防止代码泄露 java常见漏洞

java开发的jsp程序编译后能够通过反编译看到源码,如何可以避免源码泄露|?

JSP没有办法,把方法什么的都写到JAVA代码里,JSP只调用,JAVA代码可以通过工具进行混淆,让人无法反编译出原代码

创新互联是一家专业提供松江企业网站建设,专注与成都网站设计、成都网站制作、H5技术、小程序制作等业务。10年已为松江众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。

如何保护源代码,防止其泄露、扩散。有什么源代码保护软件没有?

当然有软件保护公司内部源代码了,搜索源代码加密软件即可。不过需要注意的是,这里所指的加密并不是对源代码本身进行加密保护,而是指环境加密(DSA数据安全隔离技术等)。根本原因在于代码本身进程较多、调用复杂,对本身依据进程进行加密保护(防泄密)容易卡、慢、死机。

如何防止公司代码外泄

楼主你好,先回答一下你的问题,然后我再谈谈我自己的想法。

研发型企业防范源代码泄露,可以有以下方法:

管理层面

1、和员工签署保密协议,可以一定程度上的防止员工主动泄密。

2、禁用USB接口,这种方法可以防止开发人员恶意拷贝代码等数据,也可以防止U盘或硬盘的病毒扩散。

3、安装监控软件,监控员工的所有操作行为,对敏感操作(比如发送文件、拷贝至U盘)进行警报提醒。

4、安装摄像头,约束员工的行为。不过,监控类的约束需要和员工提前沟通好,避免引起抵触情绪。

5、限制上网行为,比如不能连接互联网,不过工作中难免会需要外部的信息,所以这种方式会给工作带来一定的影响。

等等

技术层面

1、安装加密软件,对文档本身进行保护,研发代码等数据无论以何种方式、何种途径泄露,始终是密文,从而保障企业核心机密不被非法窃取。

2、加水印,以桌面水印的形式在终端计算机桌面上显示,防止通过拍照、截屏、打印的方式泄露信息。

3、实施网络隔离,很多企业将内网与互联网进行隔离,将内部数据“困在”内网,同时也能够有效屏蔽外部网络攻击的风险。通过网络隔离的方式,可以有效防止内部核心代码数据泄露。

4、使用云桌面,它的成本比较低,使用灵活,开发人员的终端不再保存数据和存储,实现代码等数据不落地,保障信息安全。

等等

这些手段都能从一定程度上保护代码,防止泄露,这些也是目前很多企业,尤其是大型企业会使用的主流方法。

再来谈谈我的建议。

以上有些方法容易造成员工抵触情绪,比如监控,也有一些会影响工作效率,比如禁用USB接口、限制上网行为等。

对于开发人员来说,提升工作效率也是很重要的。目前,无论在科技研发型企业,还是金融、能源、工业、政府行业,很多都倾向于对网络实施隔离,这个算是目前最流行的方式了,有的企业不仅仅是内外网的隔离,较大规模的企业还可能对内部网络实施进一步的隔离,比如划分为办公网、研发网、生产网、测试网等,主要用来屏蔽不同部门、不同业务之间的违规数据交换。这是一种既能保护代码,又不影响工作的手段。这里有一份《企业网络隔离建设指南》,有需要的可以参考一下。

【转】如何保护Java代码

以下从技术角度就常见的保护措施 和常用工具来看看如何有效保护java代码:1. 将java包装成exe 特点:将jar包装成可执行文件,便于使用,但对java程序没有任何保护。不要以为生成了exe就和普通可执行文件效果一样了。这些包装成exe的程序运行时都会将jar文件释放到临时目录,很容易获取。常用的工具有exe4j、jsmooth、NativeJ等等。jsmooth生成的exe运行时临时目录在exe所在目录中或是用户临时目录 中;exe4j生成的exe运行时临时目录在用户临时目录中;NativeJ生成的exe直接用winrar打开,然后用zip格式修复成一个jar文件,就得到了原文件。如果只是为了使用和发布方便,不需要保护java代码,使用这些工具是很好的选择。2. java混淆器特点:使用一种或多种处理方式将class文件、java源代码进行混淆处理后生成新的class,使混淆后的代码不易被反编译,而反编译后的代码难以阅 读和理解。这类混淆器工具很多,而且也很有成效。缺点:虽然混淆的代码反编译后不易读懂,但对于有经验的人或是多花些时间,还是能找到或计算出你代码中隐藏的敏感内容,而且在很多应用中不是全部代码都能混淆的,往往一些关键的库、类名、方法名、变量名等因使用要求的限制反而还不能混淆。3. 隔离java程序到服务端特点:把java程序放到服务端,让用户不能访问到class文件和相关配套文件,客户端只通过接口访问。这种方式在客户/服务模式的应用中能较好地保护java代码。缺点是:必须是客户/服务模式,这种特点限制了此种方式的使用范围;客户端因为逻辑的暴露始终是较为薄弱的环节,所以访问接口时一般都需要安全性认证。4. java加密保护特点:自定义ClassLoader,将class文件和相关文件加密,运行时由此ClassLoader解密相关文件并装载类,要起到保护作用必须自定 义本地代码执行器将自定义ClassLoader和加密解密的相关类和配套文件也保护起来。此种方式能很有效地保护java代码。缺点:可以通过替换JRE包中与类装载相关的java类或虚拟机动态库截获java字节码。 jar2exe属于这类工具。5. 提前编译技术(AOT) 特点:将java代码静态编译成本地机器码,脱离通用JRE。此种方式能够非常有效地保护java代码,且程序启动比通用JVM快一点。具有代表性的是GNU的gcj,可以做到对java代码完全提前编译,但gcj存在诸多局限性,如:对JRE 5不能完整支持、不支持JRE 6及以后的版本。由于java平台的复杂性,做到能及时支持最新java版本和JRE的完全提前编译是非常困难的,所以这类工具往往采取灵活方式,该用即时编译的地方还是 要用,成为提前编译和即时编译的混合体。缺点:由于与通用JRE的差异和java运用中的复杂性,并非java程序中的所有jar都能得到完全的保护;只能使用此种工具提供的一个运行环境,如果工具更新滞后或你需要特定版本的JRE,有可能得不到此种工具的支持。 Excelsior JET属于这类工具。6. 使用jni方式保护特点:将敏感的方法和数据通过jni方式处理。此种方式和“隔离java程序到服务端”有些类似,可以看作把需要保护的代码和数据“隔离”到动态库中,不同的是可以在单机程序中运用。缺点和上述“隔离java程序到服务端”类似。7. 不脱离JRE的综合方式保护特点:非提前编译,不脱离JRE,采用多种软保护方式,从多方面防止java程序被窃取。此种方式由于采取了多种保护措施,比如自定义执行器和装载器、加密、JNI、安全性检测、生成可执行文件等等,使保护力度大大增强,同样能够非常有效地保护java代码。缺点:由于jar文件存在方式的改变和java运用中的复杂性,并非java程序中的所有jar都能得到完全的保护;很有可能并不支持所有的JRE版本。 JXMaker属于此类工具。8. 用加密锁硬件保护特点:使用与硬件相关的专用程序将java虚拟机启动程序加壳,将虚拟机配套文件和java程序加密,启动的是加壳程序,由加壳程序建立一个与硬件相关的 受保护的运行环境,为了加强安全性可以和加密锁内植入的程序互动。此种方式与以上“不脱离JRE的综合方式保护”相似,只是使用了专用硬件设备,也能很好地保护java代码。缺点:有人认为加密锁用户使用上不太方便,且每个安装需要附带一个。从以上描述中我们可以看出:1. 各种保护方式都有其优缺点,应根据实际选用2. 要更好地保护java代码应该使用综合的保护措施3. 单机环境中要真正有效保护java代码,必须要有本地代码程序配合当然,安全都是相对的,一方面看你的保护措施和使用的工具能达到的程度,一方面看黑客的意愿和能力,不能只从技术上保护知识产权。总之,在java 代码保护方面可以采取各种可能的方式,不可拘泥于那些条条框框。

java正则表达式怎么防止代码漏洞

javaWeb安全漏洞及处理方式

关注

转载自:

1、SQL注入攻击

SQL注入攻击就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

随着B/S框架结构在系统开发中的广泛应用,恶意攻击者利用SQL命令在Web表单中输入合法的字符或查询字符串来欺骗服务器执行SQL命令。当注入攻击得逞后,Web程序将泄露大量用户隐私数据和数据库中数据结构。攻击者能够获得系统较高的访问权限,进行破坏操作。

SQL注入可以分为平台层注入和代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。基于此,SQL注入的产生原因通常表现在以下几方面:

1)不当的类型处理;

2)不安全的数据库配置;

3)不合理的查询集处理;

4)不当的错误处理;

5)转义字符处理不合适;

6) 多个提交处理不当。

解决方法:

数据库安全通信包括SQL注入攻击的防范、安全设置、异常信息处理三个方面。

1.服务端Filter对访问者输入的字符进行过滤检验,但是攻击者经常把危险字符潜藏在用户输入的有效字符中完 成过滤检验。

2.通过正则表达式对页面的文本框输入的数据进行限制可以减少过滤检验存在的漏洞。

3.使用prepareStatment预编译sql语句

2、XSS跨站脚本攻击

跨站脚本(Cross-site scripting,简称XSS),是一种迫使Web站点回显可执行代码的攻击技术,而这些可执行代码由攻击者提供、最终为用户浏览器加载。不同于大多数攻击(一般只涉及攻击者和受害者),XSS涉及到三方,即攻击者、客户端与网站。XSS的攻击目标是为了盗取客户端的cookie或者其他网站用于识别客户端身份的敏感信息。获取到合法用户的信息后,攻击者甚至可以假冒最终用户与网站进行交互。

XSS 属于被动式的攻击。攻击者先构造一个跨站页面,利用SCRIPT、IMG、IFRAME等各种方式使得用户浏览这个页面时,触发对被攻击站点的HTTP 请求。此时,如果被攻击者如果已经在被攻击站点登录,就会持有该站点cookie。这样该站点会认为被攻击者发起了一个HTTP请求。而实际上这个请求是在被攻击者不知情情况下发起的,由此攻击者在一定程度上达到了冒充被攻击者的目的。精心的构造这个攻击请求,可以达到冒充发文,夺取权限等多个攻击目的。在常见的攻击实例中,这个请求是通过script 来发起的,因此被称为Cross Site Script。

XSS漏洞成因是由于动态网页的Web应用对用户提交请求参数未做充分的检查过滤,允许用户在提交的数据中掺入HTML代码(最主要的是“”、“”),然后未加编码地输出到第三方用户的浏览器,这些攻击者恶意提交代码会被受害用户的浏览器解释执行。

分为三种类型:

1)反射型(数据流向:浏览器 -后端 - 浏览器)

反射型XSS脚本攻击即如我们上面所提到的XSS跨站脚本攻击方式,该类型只是简单地将用户输入的数据直接或未经过完善的安全过滤就在浏览器中进行输出,导致输出的数据中存在可被浏览器执行的代码数据。由于此种类型的跨站代码存在于URL中,所以黑客通常需要通过诱骗或加密变形等方式,将存在恶意代码的链接发给用户,只有用户点击以后才能使得攻击成功实施。

2)存储型(数据流向是:浏览器 -后端 - 数据库 - 后端- 浏览器)

存储型XSS脚本攻击是指Web应用程序会将用户输入的数据信息保存在服务端的数据库或其他文件形式中,网页进行数据查询展示时,会从数据库中获取数据内容,并将数据内容在网页中进行输出展示,因此存储型XSS具有较强的稳定性。

存储型XSS脚本攻击最为常见的场景就是在博客或新闻发布系统中,黑客将包含有恶意代码的数据信息直接写入文章或文章评论中,所有浏览文章或评论的用户,都会在他们客户端浏览器环境中执行插入的恶意代码。

3)基于DOM(数据流向是:URL--浏览器 )

基于DOM的XSS跨站脚本攻击是通过修改页面DOM节点数据信息而形成的XSS跨站脚本攻击。不同于反射型XSS和存储型XSS,基于DOM的XSS跨站脚本攻击往往需要针对具体的javascript DOM代码进行分析,并根据实际情况进行XSS跨站脚本攻击的利用。

解决方法:

1).输入过滤。对用户的所有输入数据进行检测,比如过滤其中的“”、“”、“/”等可能导致脚本注入的特殊字符,或者过滤“script”、“javascript”等脚本关键字,或者对输入数据的长度进行限制等等。同时,我们也要考虑用户可能绕开ASCII码,使用十六进制编码来输入脚本。因此,对用户输入的十六进制编码,我们也要进行相应的过滤。只要能够严格检测每一处交互点,保证对所有用户可能的输入都进行检测和XSS过滤,就能够有效地阻止XSS攻击。

2).输出编码。通过前面对XSS攻击的分析,我们可以看到,之所以会产生XSS攻击,就是因为Web应用程序将用户的输入直接嵌入到某个页面当中,作为该页面的HTML代码的一部分。因此,当Web应用程序将用户的输入数据输出到目标页面中时,只要用HtmlEncoder等工具先对这些数据进行编码,然后再输出到目标页面中。这样,如果用户输入一些HTML的脚本,也会被当成普通的文字,而不会成为目标页面HTML代码的一部分得到执行.

3、CSRF跨站请求伪造漏洞防护

CSRF是CrossSite Request Forgery的缩写,乍一看和XSS差不多的样子,但是其原理正好相反,XSS是利用合法用户获取其信息,而CSRF是伪造成合法用户发起请求。

字面理解意思就是在别的站点伪造了一个请求。专业术语来说就是在受害者访问一个网站时,其 Cookie 还没有过期的情况下,攻击者伪造一个链接地址发送受害者并欺骗让其点击,从而形成 CSRF 攻击。

根据HTTP协议,在HTTP头中有一个字段叫Referer,它记录了该HTTP请求的来源地址。在通常情况下,访问一个安全受限页面的请求必须来自于同一个网站。

解决方案:

配置FILTER拦截用户所有请求(POST/GET),对用户请求Referer头URL进行合法性校验。

4、URL链接注入漏洞防护

链接注入是修改站点内容的行为,其方式为将外部站点的 URL 嵌入其中,或将有易受攻击的站点中的脚本 的 URL 嵌入其中。将URL 嵌入易受攻击的站点中,攻击者便能够以它为平台来启动对其他站点的攻击,以及攻击这个易受攻击的站点本身。

解决方案:

1,二次验证,进行重要敏感操作时,要求用户进行二次验证。

2,验证码,进行重要敏感操作时,加入验证码。

3,验证 HTTP 的 Referer 字段。

4,请求地址中添加 Token 并验证。

5,HTTP 头中自定义属性并验证。

5、会话COOKIE中缺少HttpOnly防护

会话cookie中缺少HttpOnly属性会导致攻击者可以通过程序(JS脚本、Applet等)获取到用户的cookie信息,造成用户cookie信息泄露,增加攻击者的跨站脚本攻击威胁。

HttpOnly是微软对cookie做的扩展,该值指定cookie是否可通过客户端脚本访问。Microsoft Internet Explorer 版本 6 Service Pack 1 和更高版本支持cookie属性HttpOnly。

如果在Cookie中没有设置HttpOnly属性为true,可能导致Cookie被窃取。窃取的Cookie可以包含标识站点用户的敏感信息。

如果在Cookie中设置HttpOnly属性为true,兼容浏览器接收到HttpOnly cookie,那么客户端通过程序(JS脚本、Applet等)将无法读取到Cookie信息,这将有助于缓解跨站点脚本威胁。

解决方案:

配置filter拦截器,将服务器端返回请求,向所有会话cookie中添加“HttpOnly”属性。

示例代码:

HttpServletResponseresponse=(HttpServletResponse)paramServletResponse;

response.setHeader("SET-COOKIE","JSESSIONID=" + sessionid + "; HttpOnly");

6、点击劫持漏洞(Clickjacking)防护

点击劫持是一种视觉上的欺骗手段,攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户在不知情的情况下点击了透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上。

解决方案:

配置FILTER拦截器,在服务器端返回请求中,使用一个HTTP头“X-Frame-Options”值为SAMEORIGIN-同源策略 ,则frame页面的地址只能为同源域名下面的页面,防止点击劫持漏洞发生。

示例代码:

HttpServletResponseresponse=(HttpServletResponse)paramServletResponse;

response.addHeader("x-frame-options","SAMEORIGIN");

7、HTTP host 头攻击漏洞

使用HTTP代理工具,可以篡改HTTP报文头部中HOST字段时,该值可被注入恶意代码。因为需要控制客户端的输入,故该漏洞较难利用。

解决方案:

配置FILTER拦截器,对请求输入HOST头信息进行信息安全性校验,防止HOST头信息被恶意篡改利用。

示例代码:

HttpServletRequest request =(HttpServletRequest)servletRequest;

//主机ip和端口 或 域名和端口

String myhosts = request.getHeader("host");

if(!StringUtils.equals(myhosts, "xx.xx.xxx.xxx:xxxx")

!StringUtils.equals(myhosts, "xx.xx.xxx.xxx:xxxx")

!StringUtils.equals(myhosts,"xx.xx.xxx.xxx:xxxx")StringUtils.equals(myhosts,"xx.xx.xxx.xxx")

!StringUtils.equals(myhosts,"xx.xx.xxx.xxx") !StringUtils.equals(myhosts,"xx.xx.xxx.xxx" ){

logger.error("======访问host非法,已拦截======");

response.sendRedirect(request.getContextPath() + "/login.jsp");

return;

}

8、越权访问漏洞防护

越权访问(Broken Access Control,简称BAC)是Web应用程序中一种常见的漏洞,分为垂直越权访问和水平越权访问。垂直越权是指不同用户级别之间的越权,如普通用户执行管理员用户的权限。水平越权是指相同级别用户之间的越权操作。

Web应用程序如果存在越权访问漏洞,可能导致以下危害:

1)导致任意用户敏感信息泄露;

2)导致任意用户信息被恶意修改或删除。

解决方案:

配置FILTER拦截器,对请求所有URL进行拦截,对于需要进行授权的URL进行权限校验,防止用户越权访问系统资源。

9.弱口令漏洞

解决方案:最好使用至少6位的数字、字母及特殊字符组合作为密码。数据库不要存储明文密码,应存储MD5加密后的密文,由于目前普通的MD5加密已经可以被破解,最好可以多重MD5加密,或者多种加密方式叠加组合。

10.JSP页面抛出的异常可能暴露程序信息。

有经验的入侵者,可以从JSP程序的异常中获取很多信息,比如程序的部分架构、程序的物理路径、SQL注入爆出来的信息等。

解决方案:自定义一个Exception,将异常信息包装起来不要抛到页面上。

11.本地缓存漏洞

合法用户“注销”后,在未关闭浏览器的情况下,点击浏览器“后退”按钮,可从本地页面缓存中读取数据,绕过了服务端filter过滤。

解决方案:配置filter对存放敏感信息的页面限制页面缓存。如:

httpResponse.setHeader("Cache-Control","no-cache");

httpResponse.setHeader("Cache-Control","no-store");

httpResponse.setDateHeader("Expires",0);

httpResponse.setHeader("Pragma","no-cache");

12.文件上传漏洞。

前台仅使用JS对文件后缀做了过滤,这只能针对普通的用户,而恶意攻击者完全可以修改表单去掉JS校验。

13.Java WEB容器默认配置漏洞。

如TOMCAT后台管理漏洞,默认用户名及密码登录后可直接上传war文件获取webshell。

解决方案:最好删除,如需要使用它来管理维护,可更改其默认路径,口令及密码。

公司的源代码应该怎么保护,防止泄密呢?

首先要明确,哪些数据是核心机密数据,不能让普通员工轻易接触到的,即使是研发型公司的代码,也是会划分等级的,要在保证员工的工作效率的前提下,对代码实施保护措施。

下面简单谈一下我的看法,讲讲如何防止员工的代码泄露。

首先要明确以下两点:

1、不影响被防范的成员(比如新程序员)工作。让其能正常运行、调试、查看日志等。

2、对核心代码封死,需要保护的部分不可见。

再来看看有哪些具体做法:

签署保密协议

对源代码分级,清楚知道什么是需要保护的

为版本管理服务器上的工程设置读取密码

源码版本控制,按照职责和权限进行划分

确保架构做分层

屏蔽USB和光驱

每人两台电脑,分别连接不同网络

封闭式开发、禁止上互联网

使用加密软件

使用加水印功能

使用云桌面技术

实施网络隔离

……

当然,每个公司会根据自身的实际情况来选择一种适合的方法,前提是不影响员工工作效率,不能让员工产生抵触情绪。公司的价值都是员工创造的,所以一定要秉着以人为本的原则,让员工对公司忠诚,减少离职,这才是利益最大化的方法。

在以上这些方法中,个人较为推荐的是使用云桌面或者实施网络隔离,通过云桌面实现数据不落地,防止被拷贝;实施网络隔离可以有效阻断数据的外泄。之前看过《企业网络隔离建设指南》,感觉还不错,推荐给大家参考一下。


分享文章:java项目防止代码泄露 java常见漏洞
转载注明:http://ybzwz.com/article/hihppi.html