關於表單跨域提交的防範,一些疑問

來源:互聯網
上載者:User
今天看到書上寫的關於防止跨域提交的方法,他是在表單提交頁面產生一個隱藏的input,值是存在session裡隨機數

index.php頁面

以下是b.php代碼

if($_POST['token'] == $_SESSION['token']){    # do code}

我的疑問是這樣真的可以防範跨域嗎?假如我現在訪問index.php 然後右鍵查看原始碼,把token複製下來,在本地建立一個表單頁面,地址也提交到b.php,用複製好的token值,不就完成跨域了嗎

謝謝幾位的耐心解答,月領的一句話提示了我,我又翻閱了一下書上會話控制這節,簡單說一下session機制,不同電腦訪問伺服器上的index.php指令碼,會在你本地設定一個值唯一的session_id的cookie檔案,同時伺服器上也也會存在一份和你本地session_id值相同的資料,裡面儲存有$_SESSION['token']的值。所以說由於你本地cookie中session_id的唯一性,不同電腦在伺服器上的session資料是不一樣的。

回複內容:

今天看到書上寫的關於防止跨域提交的方法,他是在表單提交頁面產生一個隱藏的input,值是存在session裡隨機數

index.php頁面

以下是b.php代碼

if($_POST['token'] == $_SESSION['token']){    # do code}

我的疑問是這樣真的可以防範跨域嗎?假如我現在訪問index.php 然後右鍵查看原始碼,把token複製下來,在本地建立一個表單頁面,地址也提交到b.php,用複製好的token值,不就完成跨域了嗎

謝謝幾位的耐心解答,月領的一句話提示了我,我又翻閱了一下書上會話控制這節,簡單說一下session機制,不同電腦訪問伺服器上的index.php指令碼,會在你本地設定一個值唯一的session_id的cookie檔案,同時伺服器上也也會存在一份和你本地session_id值相同的資料,裡面儲存有$_SESSION['token']的值。所以說由於你本地cookie中session_id的唯一性,不同電腦在伺服器上的session資料是不一樣的。

首先,按照你說的方法是跨域不了的。

if($_POST['token'] == $_SESSION['token']){    # do code}

請注意上面的檢驗,$_SESSION['token']是什嗎?
SESSION只對你自己的網頁有效,你造嗎?

正確的思路是把本地的Cookie(對應著SESSION的資訊的)也複製下來,然後發送過去。
然而只用瀏覽器和手寫HTML是沒法很簡單地完成的。
防止跨域提交只是保證網頁不被其它網頁的JS攻擊而已,不要期待太多。

另外,你要知道網頁是對所有人開放的,你的所有可以被訪問到的PHP都可能收到各種各樣的參數。
駭客攻擊、使用者濫用、網頁BUG……

比如,某個表單需要輸入電話號碼提交。
使用者可能禁用掉JS,然後輸入了20位的號碼。
駭客可能使用工具,亂髮參數試探你的後台代碼。
So?
所以你就不寫檢驗電話號碼正確性的代碼嗎?

不能因噎廢食啊,騷年。

正常情況下 防止跨域 提交是指的從 domainA 下提交資料到 到 domainB 下的這種情況,
而且正常情況下 domainA 下的頁面是沒有辦法拿到 domainB 域下頁面的內容的,
而你直接跳過了瀏覽器對不同域之間所做的限制(由你自己手工完成token的擷取,跨過了不同域下不能得到內容的這個限制), 所以你的這種做法實際上是行不通的(不是指你提交token對方不認可, 而是指你在http/https下是實現不了自動化的).

而且更進一步的, 除了加token之外, 還有一些其他的附加方法,比如檢測請求的來源(referer)是否為本站.

是的 沒錯 跨域只是瀏覽器本身的安全措施 而且是正規瀏覽器 從這次xcode事件
媽的萬一以後有不按規則玩的瀏覽器來怎麼辦
要不為什麼我拿了session在flider這種調試工具裡就可以隨便post
不過session(token)就是使用者合法身份的標識 拿這些也是要登入或者鑒權的
唯一的可能就是他是個開發人員 或者是個機器人。。。

另外token的更主要用途是防止重複提交 或者csrf

我看著真糾結,那個b.php的處理代碼處理完一個表單後就銷毀會話token讓每次提交處理都是新的token不久解決了跨域問題?樓主說的已經很棒了,補充一下

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.