※ 引述《kencool107 (臉都歪了)》之銘言:
: 我想請問一下
: 有什麼方法可以防止這種攻擊
: 檢查REFFER可以偽裝
: 網路上說用session
: 可是我看不太懂是什麼意思
: 而且我照做
: 還是可以另存頁面再改掉提交
: 這是傳送端A.php
: <?php
: session_start();
: $token = md5(uniqid(rand(), true));
: $_SESSION['token']= $token;
: ?>
: <form action="http://XXXX/B.php" method="post">
: <p><label for="name">Name</label>
: <input type="text" name="name" id="name" size="20" maxlength="40"/></p>
: <input type="hidden" name="token" value="<?php echo $token;?>"/>
: <p><input type="submit" name="submit" value="go"/></p>
: </form>
: 這是接收端B.php
: <?php
: session_start();
: if ($_POST['submit'] == "go"){
: if ($_POST['token'] == $_SESSION['token'])
: {
: echo "success";
: }else{
: echo "fail";
: }
: }
: ?>
: 可是我先開A 然後複製A的原始碼到我的本機改值
: 然後再送到B
: 他檢查session還是相同的 邏輯來看好像是這樣沒錯
: 所以要怎麼做哩
你這邊講的方法這段是防止 跨網站攻擊(Cross-site request forgery)
所以這個方法本身沒錯 只是跟你想要的用途可能不太一樣
我有點不太懂你想擋啥@@
照你的這個作法來作的話 你可以作什麼樣的攻擊? (如果我把值過濾好的話)
即使是驗證碼 我也是可以開了頁面 得到驗證碼 自己另外送個request+驗證碼過去
如果沒啥奇怪的值 那何必擋
如果有 那就做好輸入值的過濾就好啦@@
就是說...不太需要去管他是從網站這邊 還是他另存頁面然後另外送 這不算攻擊
當然如果是高頻率的重複性提交 這時就可以考慮用驗證碼之類的來擋
--
http://blog.carlcarl.tw
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.242.43.36