﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-魔のkyo的工作室-随笔分类-AJAX</title><link>http://www.cnitblog.com/luckydmz/category/7568.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 26 Sep 2011 14:18:53 GMT</lastBuildDate><pubDate>Mon, 26 Sep 2011 14:18:53 GMT</pubDate><ttl>60</ttl><item><title>如何防止伪造的数据从URL提交</title><link>http://www.cnitblog.com/luckydmz/archive/2008/09/05/48731.html</link><dc:creator>魔のkyo</dc:creator><author>魔のkyo</author><pubDate>Thu, 04 Sep 2008 16:43:00 GMT</pubDate><guid>http://www.cnitblog.com/luckydmz/archive/2008/09/05/48731.html</guid><wfw:comment>http://www.cnitblog.com/luckydmz/comments/48731.html</wfw:comment><comments>http://www.cnitblog.com/luckydmz/archive/2008/09/05/48731.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/luckydmz/comments/commentRss/48731.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/luckydmz/services/trackbacks/48731.html</trackback:ping><description><![CDATA[<p>下面是一个检查前一页来源的代码</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">&lt;?</span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">PHP防止站外提交数据的方法</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;CheckURL(){<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #800080">$servername</span><span style="COLOR: #000000">=</span><span style="COLOR: #800080">$_SERVER</span><span style="COLOR: #000000">[</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">SERVER_NAME</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">];&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #800080">$sub_from</span><span style="COLOR: #000000">=</span><span style="COLOR: #800080">$_SERVER</span><span style="COLOR: #000000">[</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">HTTP_REFERER</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">];&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #800080">$sub_len</span><span style="COLOR: #000000">=</span><span style="COLOR: #008080">strlen</span><span style="COLOR: #000000">(</span><span style="COLOR: #800080">$servername</span><span style="COLOR: #000000">);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #800080">$checkfrom</span><span style="COLOR: #000000">=</span><span style="COLOR: #008080">substr</span><span style="COLOR: #000000">(</span><span style="COLOR: #800080">$sub_from</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">,</span><span style="COLOR: #800080">$sub_len</span><span style="COLOR: #000000">);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #800080">$checkfrom</span><span style="COLOR: #000000">!=</span><span style="COLOR: #800080">$servername</span><span style="COLOR: #000000">)</span><span style="COLOR: #0000ff">die</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">警告！你正在从外部提交数据！请立即终止！</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);&nbsp;<br>}<br></span><span style="COLOR: #000000">?&gt;</span></div>
这个方法只能放置手动在浏览栏上输入的URL。<br>事实上只要在服务器上构造出一个指向该URL的链接（比如在发贴时加入超链），再点击，这个Check就完全不起作用了。<br><br>目前觉得还是用POST的方法传递重要数据比较可靠。<br>可以在form中插入一些隐藏的text用于传递数据。<br>或者使用下面的方法，利用Ajax从客户端向服务器提交数据。<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">创建XHR对象</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;createXHR()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(window.XMLHttpRequest){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;oHttp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;XMLHttpRequest();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;oHttp;<br>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(window.ActiveXObject){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;versions&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;[</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">MSXML2.XmlHttp.6.0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">MSXML2.XmlHttp.3.0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;versions.length;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;oHttp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;ActiveXObject(versions[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;oHttp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">&nbsp;(error)&nbsp;{}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Error(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">你的浏览器不支持AJAX！</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>}<br><br></span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">用AJAX向page页面传递数据</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;ajaxPost(url,query_string</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'')<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;xhr;<br>&nbsp;&nbsp;&nbsp;&nbsp;xhr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;createXHR();<br>&nbsp;&nbsp;&nbsp;&nbsp;xhr.open('POST',url,</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;xhr.setRequestHeader(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Content-Type</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">application/x-www-form-urlencoded;&nbsp;charset=gb2312</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;xhr.onreadystatechange&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(xhr.readyState&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">)</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(xhr.status&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">)</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;}<br>&nbsp;&nbsp;&nbsp;&nbsp;xhr.send(query_string);<br>}</span></div>
<img src ="http://www.cnitblog.com/luckydmz/aggbug/48731.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/luckydmz/" target="_blank">魔のkyo</a> 2008-09-05 00:43 <a href="http://www.cnitblog.com/luckydmz/archive/2008/09/05/48731.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>