<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Neeke &#187; 信息安全</title>
	<atom:link href="http://www.ineeke.com/tag/%e4%bf%a1%e6%81%af%e5%ae%89%e5%85%a8/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ineeke.com</link>
	<description>悄悄记录点点滴滴</description>
	<lastBuildDate>Sat, 07 Jan 2012 13:04:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Java WEB安全问题及解决方案</title>
		<link>http://www.ineeke.com/archives/1335/</link>
		<comments>http://www.ineeke.com/archives/1335/#comments</comments>
		<pubDate>Fri, 22 Apr 2011 00:44:41 +0000</pubDate>
		<dc:creator>Neeke</dc:creator>
				<category><![CDATA[J2EE技术]]></category>
		<category><![CDATA[信息安全]]></category>
		<category><![CDATA[web入侵]]></category>

		<guid isPermaLink="false">http://www.ineeke.com/?p=1335</guid>
		<description><![CDATA[自己简单总结的，可能还不够完善，日后慢慢补充。 1.弱口令漏洞 解决方案：最好使用至少6位的数字、字母及特殊字符组合作为密码。数据库不要存储明文密码，应存储MD5加密后的密文，由于目前普通的MD5加密已经可以被破解，最好可以多重MD5加密。 2.未使用用户名及密码登录后台可直接输入后台URL登录系统。 解决方案：通过配置filter来过滤掉无效用户的连接请求。 3．JSP页面抛出的异常可能暴露程序信息。有经验的入侵者，可以从JSP程序的异常中获取很多信息，比如程序的部分架构、程序的物理路径、SQL注入爆出来的信息等。 解决方案：自定义一个Exception，将异常信息包装起来不要抛到页面上。 4.合法用户“注销”后，在未关闭浏览器的情况下，点击浏览器“后退”按钮，可从本地页面缓存中读取数据，绕过了服务端filter过滤。 解决方案：配置filter对存放敏感信息的页面限制页面缓存。如： httpResponse.setHeader&#40;&#34;Cache-Control&#34;,&#34;no-cache&#34;&#41;; httpResponse.setHeader&#40;&#34;Cache-Control&#34;,&#34;no-store&#34;&#41;; httpResponse.setDateHeader&#40;&#34;Expires&#34;, 0&#41;; httpResponse.setHeader&#40;&#34;Pragma&#34;,&#34;no-cache&#34;&#41;; 5.SQL注入漏洞。 解决方案：在数据库访问层中不要使用“+”来拼接SQL语句！如： String sql= “SELECT * FROM USERS WHERE 1=1”; if&#40;null != user.getUserName&#40;&#41; &#38;&#38; !””.equals&#40;user.getUserName&#40;&#41;&#41;&#41;&#123; sql += “ and UNAME = ‘”+user.getUserName&#40;&#41;+”’”; &#125; 而应使用PreparedStatement。如： PreparedStatement pstmt = con.prepareStatement&#40;&#34;SELECT * FROM USERS WHERE UNAME=?&#34;&#41;; pstmt.setString&#40;1, “Neeke”&#41;; 如果项目中使用了Hibernate框架，则推荐使用named parameter。如： String queryString = &#34;from [...]]]></description>
			<content:encoded><![CDATA[<p>自己简单总结的，可能还不够完善，日后慢慢补充。</p>
<p><strong>1.弱口令漏洞</strong></p>
<p><em>解决方案：</em>最好使用至少6位的数字、字母及特殊字符组合作为密码。数据库不要存储明文密码，应存储MD5加密后的密文，由于目前普通的MD5加密已经可以被破解，最好可以多重MD5加密。</p>
<p><strong>2.未使用用户名及密码登录后台可直接输入后台URL登录系统。</strong></p>
<p><em>解决方案：</em>通过配置filter来过滤掉无效用户的连接请求。</p>
<p><strong>3．JSP页面抛出的异常可能暴露程序信息。有经验的入侵者，可以从JSP程序的异常中获取很多信息，比如程序的部分架构、程序的物理路径、SQL注入爆出来的信息等。</strong></p>
<p><em>解决方案：</em>自定义一个Exception，将异常信息包装起来不要抛到页面上。</p>
<p><strong>4.合法用户“注销”后，在未关闭浏览器的情况下，点击浏览器“后退”按钮，可从本地页面缓存中读取数据，绕过了服务端filter过滤。</strong><br />
<span id="more-1335"></span><br />
<em>解决方案：</em>配置filter对存放敏感信息的页面限制页面缓存。如：</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">httpResponse.<span style="color: #006633;">setHeader</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Cache-Control&quot;</span>,<span style="color: #0000ff;">&quot;no-cache&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
httpResponse.<span style="color: #006633;">setHeader</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Cache-Control&quot;</span>,<span style="color: #0000ff;">&quot;no-store&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
httpResponse.<span style="color: #006633;">setDateHeader</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Expires&quot;</span>, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
httpResponse.<span style="color: #006633;">setHeader</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Pragma&quot;</span>,<span style="color: #0000ff;">&quot;no-cache&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><strong>5.SQL注入漏洞。</strong></p>
<p><em>解决方案：</em>在数据库访问层中不要使用“+”来拼接SQL语句！如：</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">String</span> sql<span style="color: #339933;">=</span> “SELECT <span style="color: #339933;">*</span> FROM USERS WHERE <span style="color: #cc66cc;">1</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">1</span>”<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">null</span> <span style="color: #339933;">!=</span> user.<span style="color: #006633;">getUserName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span>””.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span>user.<span style="color: #006633;">getUserName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	sql <span style="color: #339933;">+=</span> “ and UNAME <span style="color: #339933;">=</span> ‘”<span style="color: #339933;">+</span>user.<span style="color: #006633;">getUserName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span>”’”<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>而应使用PreparedStatement。如：</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">PreparedStatement</span> pstmt <span style="color: #339933;">=</span> con.<span style="color: #006633;">prepareStatement</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SELECT * FROM USERS WHERE UNAME=?&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
pstmt.<span style="color: #006633;">setString</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, “Neeke”<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>如果项目中使用了Hibernate框架，则推荐使用named parameter。如：</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">String</span> queryString <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;from Users where uname like :name&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p>冒号后面是一个named parameter，我们可以使用Query接口将一个参数绑定到name参数上：</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">List</span> result <span style="color: #339933;">=</span> session.<span style="color: #006633;">createQuery</span><span style="color: #009900;">&#40;</span>queryString<span style="color: #009900;">&#41;</span>
                  .<span style="color: #006633;">setString</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;name&quot;</span>, user.<span style="color: #006633;">getUserName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
                  .<span style="color: #006633;">list</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><strong>6.文件上传漏洞。前台仅使用JS对文件后缀做了过滤，这只能针对普通的用户，而恶意攻击者完全可以修改表单去掉JS校验。</strong></p>
<p><em>解决方案：</em>前台JS过滤加服务器端程序过滤。具体过滤掉哪些文件类型视具体情况而定。</p>
<p><strong>7.可执行脚本漏洞。对用户提交的数据未转义，一些用户提交的含有JavaScript脚本的信息被直接输出到页面中从而被浏览器执行。</strong></p>
<p><em>解决方案：</em>使用org.apache.commons.lang.StringEscapeUtils对用户提交的数据进行转义。如：</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">@RequestMapping<span style="color: #009900;">&#40;</span>params<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;method=addTopic&quot;</span>,method<span style="color: #339933;">=</span>RequestMethod.<span style="color: #006633;">POST</span><span style="color: #009900;">&#41;</span>
<span style="color: #000000; font-weight: bold;">public</span> ModelAndView addTopic<span style="color: #009900;">&#40;</span>HttpServletRequest request, HttpServletResponse response, BbsTopic topic<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
BaseAdmin user <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>BaseAdmin<span style="color: #009900;">&#41;</span> request.<span style="color: #006633;">getSession</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getAttribute</span><span style="color: #009900;">&#40;</span>Constant.<span style="color: #006633;">SESSION_USER</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
topic.<span style="color: #006633;">setBaseAdmin</span><span style="color: #009900;">&#40;</span>user<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
topic.<span style="color: #006633;">setTopicDate</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Timestamp</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">System</span>.<span style="color: #006633;">currentTimeMillis</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
topic.<span style="color: #006633;">setTopicContent</span><span style="color: #009900;">&#40;</span>StringEscapeUtils.<span style="color: #006633;">escapeHtml</span><span style="color: #009900;">&#40;</span>topic.<span style="color: #006633;">getTopicContent</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
topic.<span style="color: #006633;">setTopicTitle</span><span style="color: #009900;">&#40;</span>StringEscapeUtils.<span style="color: #006633;">escapeHtml</span><span style="color: #009900;">&#40;</span>topic.<span style="color: #006633;">getTopicTitle</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">bbsTopicService</span>.<span style="color: #006633;">save</span><span style="color: #009900;">&#40;</span>topic<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000000; font-weight: bold;">new</span> ModelAndView<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> RedirectView<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;bbs.do?method=topicList&amp;bfid=&quot;</span><span style="color: #339933;">+</span> topic.<span style="color: #006633;">getBfid</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><strong>8.Java WEB容器默认配置漏洞。如TOMCAT后台管理漏洞，默认用户名及密码登录后可直接上传war文件获取webshell。</strong></p>
<p><em>解决方案：</em>最好删除，如需要使用它来管理维护，可更改其默认路径，口令及密码。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ineeke.com/archives/1335/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>来联系我吧</title>
		<link>http://www.ineeke.com/archives/1145/</link>
		<comments>http://www.ineeke.com/archives/1145/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 01:55:25 +0000</pubDate>
		<dc:creator>Neeke</dc:creator>
				<category><![CDATA[网络拾遗]]></category>
		<category><![CDATA[信息安全]]></category>
		<category><![CDATA[社会工程学]]></category>

		<guid isPermaLink="false">http://www.ineeke.com/?p=1145</guid>
		<description><![CDATA[经常有人留言问怎么和我取得联系，联系方式是否要公开出来我又犹豫不决，我对于网络个人信息安全很敏感啊，好怕被人社工... n:-gg ]]></description>
			<content:encoded><![CDATA[<p>经常有人留言问怎么和我取得联系，联系方式是否要公开出来我又犹豫不决，我对于网络个人信息安全很敏感啊，好怕被人社工&#8230; n:-gg<br />
网络中到处可以看到（BBS/Blog好像居多）楼下的想联系楼主，但是楼主没留下联系方式，于是乎后面的人就把自己的联系方式公开出来希望能被楼主看到，貌似很正常，可是我觉得很不安全，你所留下的信息是所有人都可以看到的。<br />
我和陌生人聊QQ时经常会先对其调查一番，拿着他的QQ号去百度一下，Google一下，或许就能弄到少信息出来，有的人QQ号和邮箱绑定了，从QQ上得到他的邮箱地址，再去百度一下，Google一下，QQ上的基本资料+交友中心+QQ校友，一下就把什么生日，真实姓名，原籍，现住址，小学在哪上，初中在哪上&#8230;全都出来。接着聊天的时候问他名字，他不说，我就自己报出来，感觉神乎其神的，追着我问我是怎么知道的。<br />
哎~传说中的社会工程学。网虫们注意喽~！！<br />
想想还是我留联系方式吧，方便大家交流嘛，况且应该也没有人会来社工我吧？有也不怕O(∩_∩)O哈哈~ n:-hx<br />
<a href="http://www.ineeke.com/about/" target="_blank">点击这里联系我</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ineeke.com/archives/1145/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

