我想從需要登錄的站點自動備份 Web 內(nèi)容。我嘗試通過模擬 POST 請求登錄。但我收到錯誤:csrf token: CSRF attack detected以下是我使用的代碼的一些摘錄:func postLoginForm(csrfToken string) { values := make(url.Values) values.Set("signin[username]", "myusername") values.Set("signin[password]", "mypassword") values.Set("signin[_csrf_token]", csrfToken) resp, err := http.PostForm("https://spwebservicebm.reaktor.no/admin/nb", values) dumpHTTPResponse(resp) // show response to STDOUT}我通過獲取登錄頁面并掃描它以查找名為 的隱藏輸入字段而獲得的 csrf 令牌signin[_csrf_token]。執(zhí)行此操作的代碼的重要部分如下:// Finds input field named signin[_csrf_token] and returns value as csrfTokenfunc handleNode(n *html.Node) (csrfToken string, found bool) { if n.Type == html.ElementNode && n.Data == "input" { m := make(map[string]string) for _, attr := range n.Attr { m[attr.Key] = attr.Val } if m["name"] == "signin[_csrf_token]" { return m["value"], true } } for c := n.FirstChild; c != nil; c = c.NextSibling { if csrfToken, found = handleNode(c); found { return } } return "", false}我不需要使用 Go,那只是因為我最熟悉它。使用 python 也可能是一個解決方案,但我沒有更多的運氣。
- 2 回答
- 0 關(guān)注
- 271 瀏覽
添加回答
舉報
0/150
提交
取消