Quay lại blog

Cách Xử Lý Xác Thực Web Trong Tự Động Hóa Trình Duyệt

Olivia Patel
Olivia Patel

Senior Cybersecurity Analyst

20-Aug-2026

TL;DR:

  • Xác thực tự động trình duyệt nên sử dụng lại một phiên đã được phê duyệt thay vì lặp lại đăng nhập cho mỗi công việc. Một trạng thái đã lưu có thể mang theo cookie và lưu trữ nguồn gốc vào một ngữ cảnh trình duyệt mới.
  • Xác thực chứng minh danh tính; ủy quyền quyết định những gì danh tính đó có thể làm. Một lần đăng nhập thành công không bao giờ mở rộng phạm vi phê duyệt của tự động hóa.
  • Tập tin phiên là thông tin xác thực. Giữ chúng ra khỏi kiểm soát nguồn, mã hóa chúng khi lưu trữ, hạn chế tuổi thọ của chúng và cách ly chúng theo tài khoản và môi trường.
  • MFA, khóa mật khẩu, màn hình đồng ý và phê duyệt thiết bị tạo ra ranh giới con người. Hoàn thành các bước đó qua một quy trình điều hành được phê duyệt, sau đó chỉ sử dụng lại phiên đã ủy quyền được tạo ra.
  • Trình duyệt Scraping không scrapeless có thể giữ phiên trình duyệt đã ủy quyền trong một trình duyệt đám mây. Ứng dụng của bạn vẫn sở hữu việc xử lý thông tin xác thực, chính sách tài khoản và quyết định truy cập.
  • Miễn phí để bắt đầu. Các tài khoản Scrapeless mới bao gồm thời gian chạy Trình duyệt Scraping miễn phí — đăng ký tại app.scrapeless.com.

Giới thiệu: Trạng thái Xác thực Là Một Ranh Giới Bảo Mật

Một phiên trình duyệt trở nên xác thực khi một trang chấp nhận bằng chứng về danh tính và liên kết danh tính đó với trạng thái trình duyệt. Trạng thái đó có thể nằm trong một cookie HttpOnly, lưu trữ nguồn gốc, một mã thông báo trong bộ nhớ hoặc nhiều giá trị phối hợp được thiết lập trong quá trình chuyển hướng.

Tự động hóa thất bại khi đối xử với trạng thái đó như một vấn đề điền đơn. Lặp lại đăng nhập làm tăng khả năng lộ thông tin xác thực, nhân bản các dấu nhắc MFA và che giấu sự khác biệt giữa một phiên hết hạn và một lỗi trang. Một thiết kế an toàn hơn tạo ra một trạng thái đã ủy quyền một lần, xác minh phạm vi của nó và cung cấp cho mỗi công việc một ngữ cảnh trình duyệt mới chỉ với trạng thái đó.

Hướng dẫn này sử dụng Playwright để minh họa ranh giới trạng thái trên một ứng dụng thử nghiệm cục bộ, sau đó cho thấy cách quy trình làm việc được ủy quyền kết nối với Trình duyệt Scraping không scrapeless. Chỉ sử dụng nó với các tài khoản và hệ thống mà bạn sở hữu hoặc được ủy quyền rõ ràng để tự động hóa.

Xác thực so với Ủy quyền

Xác thực trả lời "Danh tính nào đang sử dụng trình duyệt này?" Ủy quyền trả lời "Danh tính đó có thể truy cập những tài nguyên và hành động nào?" Tự động hóa trình duyệt cần cả hai kiểm tra.

Lớp Câu hỏi Kiểm soát tự động hóa
Xác thực Danh tính có được chứng minh không? Xác minh URL sau đăng nhập và một yếu tố cụ thể của tài khoản
Phiên Bằng chứng vẫn được liên kết với ngữ cảnh này không? Kiểm tra phạm vi cookie, trạng thái lưu trữ và hành vi hết hạn
Ủy quyền Danh tính này có thể thực hiện hành động được yêu cầu không? Sử dụng một vai trò chuyên dụng và danh sách cho phép hành động rõ ràng
Kiểm toán Hành động có thể được truy nguyên không? Ghi lại công việc, bí danh tài khoản, mục đích đã phê duyệt và kết quả

OAuth là một khuôn khổ ủy quyền, mặc dù các chuyển hướng của nó thường xuất hiện trong một hành trình đăng nhập. OAuth 2.0 định nghĩa các vai trò và luồng cấp ủy quyền; trình duyệt không nên tiết lộ mã ủy quyền hoặc mã thông báo truy cập vào nhật ký.

Cách Các Phiên Trình Duyệt Duy Trì Danh Tính

Cookie vẫn là phương tiện mang phiên trình duyệt phổ biến nhất. Máy chủ phát hành một cookie, trình duyệt áp dụng miền, đường dẫn, thời hạn và thuộc tính bảo mật của nó, và các yêu cầu sau này bao gồm nó khi phạm vi khớp. các đặc tả quản lý trạng thái HTTP định nghĩa việc lưu trữ cookie và khớp.

Các ứng dụng cũng có thể lưu trữ mã thông báo hoặc gợi ý tài khoản trong localStorage hoặc IndexedDB. sessionStorage thì khác: nó thuộc về một ngữ cảnh duyệt cấp cao và không tự động được tái tạo bởi một xuất trạng thái lưu trữ bình thường. Xác định bề mặt trạng thái thực tế trước khi thiết kế lại sử dụng.

JWT mô tả một định dạng mã thông báo, không phải một chiến lược phiên trình duyệt. Một JWT có thể xuất hiện trong một cookie, trong lưu trữ nguồn gốc, hoặc chỉ trong bộ nhớ ứng dụng. Xem khung chứa như một ranh giới bảo mật.

Mật khẩu, Phiên, OAuth và WebAuthn

Mỗi phương pháp xác thực tạo ra một ranh giới tự động hóa khác nhau.

Phương pháp Những gì tự động hóa có thể sở hữu một cách an toàn Những gì nên ở bên ngoài kịch bản
Mẫu mật khẩu Một tài khoản thử nghiệm chuyên dụng và một bí mật được cung cấp tại thời điểm chạy Thông tin xác thực cá nhân và mật khẩu mã cứng
Cookie phiên Một hiện vật trạng thái được mã hóa ngắn hạn Cookie của người dùng khác hoặc một phiên sản xuất không giới hạn
OAuth/OIDC Chuyển hướng đã phê duyệt và callback cho một khách hàng thử nghiệm Thông tin xác thực nhà cung cấp, sự đồng ý ngoài phạm vi đã phê duyệt
MFA Phiên sau MFA sau khi phê duyệt của điều hành viên SMS, TOTP, thông báo đẩy, hoặc can thiệp khóa phần cứng
WebAuthn/khóa mật khẩu Một trình xác thực thử nghiệm có kiểm soát trong một môi trường mà bạn sở hữu Khóa riêng liên kết với sinh trắc học của một người hoặc thiết bị
WebAuthn sử dụng thông tin đăng nhập khóa công khai được xác định cho một bên liên quan. thông số kỹ thuật xác thực web định nghĩa trình duyệt và nghi lễ xác thực. Một khóa truy cập sản xuất hoặc khóa bảo mật được thiết kế để khó xuất khẩu, vì vậy kế hoạch tự động hóa nên bảo vệ ranh giới đó.

Cài đặt Test Harness

Ví dụ được thực hiện sử dụng Node.js và Playwright. Cài đặt cùng phiên bản gói đã được dùng cho lần xác minh:

bash Copy
npm install playwright@1.62.1

Sử dụng một .auth thư mục chuyên dụng cho các tệp trạng thái và loại trừ nó khỏi kiểm soát phiên bản. Tệp trạng thái có thể đủ để giả mạo tài khoản thử nghiệm trong khi nó vẫn còn hợp lệ.

Tái sử dụng một Phiên được Ủy quyền An toàn

Kịch bản sau tạo ra một ứng dụng cục bộ với một tài khoản thử nghiệm giả, đăng nhập một lần, lưu trạng thái trình duyệt và mở đường bảo vệ từ một ngữ cảnh mới. Nó không liên hệ với dịch vụ đăng nhập bên thứ ba hoặc sử dụng thông tin đăng nhập thật.

javascript Copy
import http from "node:http";
import fs from "node:fs/promises";
import { chromium } from "playwright";

const server = http.createServer(async (request, response) => {
  const url = new URL(request.url, "http://127.0.0.1");
  const cookies = request.headers.cookie ?? "";

  if (request.method === "POST" && url.pathname === "/login") {
    let body = "";
    for await (const chunk of request) body += chunk;
    const form = new URLSearchParams(body);
    if (form.get("username") === "test-user" && form.get("password") === "test-password") {
      response.writeHead(302, {
        "Set-Cookie": "demo_session=authorized; HttpOnly; SameSite=Lax; Path=/",
        Location: "/account",
      });
      response.end();
      return;
    }
  }

  if (url.pathname === "/account") {
    const authorized = cookies.includes("demo_session=authorized");
    response.writeHead(authorized ? 200 : 401, { "Content-Type": "text/html" });
    response.end(`<title>${authorized ? "Authorized account" : "Sign in required"}</title>`);
    return;
  }

  response.writeHead(200, { "Content-Type": "text/html" });
  response.end(`<form method="post" action="/login">
    <label>Username <input name="username"></label>
    <label>Password <input name="password" type="password"></label>
    <button>Sign in</button>
  </form>`);
});

await new Promise(resolve => server.listen(0, "127.0.0.1", resolve));
const address = server.address();
const baseUrl = `http://127.0.0.1:${address.port}`;
const statePath = "authorized-state.json";
const browser = await chromium.launch({
  headless: true,
  executablePath: process.env.CHROME_PATH || undefined,
});

try {
  const context = await browser.newContext();
  const page = await context.newPage();
  await page.goto(baseUrl);
  await page.getByLabel("Username").fill("test-user");
  await page.getByLabel("Password").fill("test-password");
  await Promise.all([
    page.waitForURL(`${baseUrl}/account`),
    page.getByRole("button", { name: "Sign in" }).click(),
  ]);
  await context.storageState({ path: statePath });
  await context.close();

  const restored = await browser.newContext({ storageState: statePath });
  const restoredPage = await restored.newPage();
  const result = await restoredPage.goto(`${baseUrl}/account`);
  const state = JSON.parse(await fs.readFile(statePath, "utf8"));
  console.log(JSON.stringify({
    status: result.status(),
    title: await restoredPage.title(),
    cookieNames: state.cookies.map(cookie => cookie.name),
  }));
  await restored.close();
} finally {
  await browser.close();
  server.close();
  await fs.rm(statePath, { force: true });
}

Chạy trực tiếp trả về HTTP 200, tiêu đề Authorized account và một cookie có tên demo_session. Điều đó chứng minh ngữ cảnh được khôi phục nhận được trạng thái được ủy quyền mà không cần lặp lại đăng nhập.

Bắt Đầu Scraping với Scrapeless

Tăng cường quy trình web scraping và tự động hóa của bạn với Scrapeless!
Đăng ký ngay hôm nay và nhận $5 tín dụng miễn phíkhông cần thẻ tín dụng.

Nhận tín dụng miễn phí của bạn ngay tại Scrapeless Dashboard.
Scrapeless Dashboard hiển thị $5.00 trong Tín dụng của Nhóm

Ranh giới MFA và Passkey

MFA chứng minh rằng một người hoặc thiết bị được phê duyệt có mặt. Tự động hóa không nên làm yếu đi chứng minh đó.

Đối với một hệ thống thử nghiệm sở hữu, sử dụng người cung cấp danh tính, tài khoản chuyên dụng, và các xác thực ảo đã được tài liệu. Đối với quyền truy cập sản xuất, hãy để người vận hành hoàn thành MFA, passkey, đồng ý, hoặc bước phê duyệt thiết bị thông qua giao diện bình thường. Quy trình làm việc có thể tái sử dụng phiên đã cấp cho đến khi hết hạn theo chính sách đã định.

Đừng thu thập mã một lần của một người, sao chép một passkey gắn với thiết bị, hoặc ẩn màn hình đồng ý. hướng dẫn quản lý phiên OWASP giải thích tại sao các định danh phiên cần được chăm sóc như thông tin đăng nhập xác thực.

Thực hiện Quy trình với Scrapeless Scraping Browser

Scrapeless Scraping Browser di chuyển quy trình trình duyệt vào một trình duyệt đám mây được quản lý trong khi mã Playwright của bạn giữ quyền kiểm soát điều hướng và trạng thái.

Cài đặt SDK bên cạnh Playwright:

bash Copy
npm install @scrapeless-ai/sdk@1.11.0 playwright@1.62.1

Lưu ý: Khối sau yêu cầu khóa API Scrapeless của bạn và một tài khoản mà bạn được ủy quyền để tự động hóa. Môi trường xác minh không cần thông tin đăng nhập đã tải SDK chính xác và xác nhận Playwright.connect là một hàm, nhưng nó không thể tạo phiên đám mây đã xác thực.

javascript Copy
import { Playwright } from "@scrapeless-ai/sdk";

const browser = await Playwright.connect({
  sessionName: "authorized-workflow",
  sessionTTL: 300,
  proxyCountry: "US",
});

const context = browser.contexts()[0];
const page = await context.newPage();
await page.goto("https://app.example.com/login", { waitUntil: "domcontentloaded" });

// Complete only the login steps approved for this account.
// An operator handles any MFA, passkey, consent, or device-approval boundary.

await page.waitForURL("https://app.example.com/account");
const state = await context.storageState();
console.log(JSON.stringify({ cookieCount: state.cookies.length, originCount: state.origins.length }));
await browser.close();

Tài liệu Scrapeless Scraping Browser bao gồm thiết lập khóa API và tạo phiên. Trang sản phẩm Scraping Browsergiá cả mô tả bề mặt trình duyệt được quản lý.

Gỡ lỗi Trạng thái Xác thực

Gỡ lỗi trạng thái danh tính từ bên ngoài vào trong. Bắt đầu với URL cuối cùng và dấu hiệu tài khoản hiển thị, sau đó kiểm tra bộ nhớ trình duyệt mà nên hỗ trợ trạng thái đó.

Triệu chứng Kiểm tra Hành động an toàn
Mẫu đăng nhập xuất hiện lại Hết hạn cookie, miền, đường dẫn, và hoàn thành chuyển hướng Tạo trạng thái được phê duyệt mới thông qua đăng nhập bình thường
Trang bảo vệ trả về 401 hoặc 403 Tính hợp lệ danh tính và quyền vai trò Xác nhận tài khoản được ủy quyền; không mở rộng vai trò
Cookie tồn tại nhưng ứng dụng trông như đã đăng xuất Lưu trữ nguồn gốc, IndexedDB, hoặc phiên máy chủ Nắm bắt toàn bộ bề mặt trạng thái cho ứng dụng sở hữu
Trạng thái hoạt động cục bộ nhưng không ở khu vực khác Chính sách hoặc kiểm soát rủi ro phụ thuộc vào khu vực Ghim khu vực được phê duyệt và ghi tài liệu về ràng buộc
Một worker ảnh hưởng đến một worker khác Tài khoản chia sẻ hoặc ngữ cảnh chia sẻ Tách biệt ngữ cảnh và tài khoản theo quy trình làm việc
Hướng dẫn proxy Playwright và trình duyệt đám mây cung cấp bước tiếp theo khi cơ sở hạ tầng khu vực và trình duyệt cần di chuyển ra ngoài máy chủ ứng dụng.

Danh sách kiểm tra An ninh và Tuân thủ

  • Chỉ sử dụng các hệ thống, người thuê và tài khoản mà quy trình làm việc được phép truy cập.
  • Cung cấp cho tài khoản tự động vai trò nhỏ nhất có thể hoàn thành nhiệm vụ đã được phê duyệt.
  • Cung cấp mật khẩu và khóa tại thời gian chạy; không bao giờ để chúng trong mã nguồn hoặc ảnh chụp màn hình.
  • Xem xét cookie, tệp trạng thái lưu trữ, mã ủy quyền và mã thông báo như là bí mật.
  • Mã hóa các artefact phiên làm việc, hạn chế quyền truy cập tệp và xóa chúng khi hết hạn chính sách.
  • Tách biệt danh tính phát triển, kiểm tra và sản xuất.
  • Yêu cầu phê duyệt của con người cho MFA, sự chấp thuận, hành động tài chính, thay đổi quyền hạn và các thao tác phá hủy.
  • Ghi lại mục đích, bí danh tài khoản, nguồn đích và kết quả mà không ghi lại các giá trị bí mật.

Kết luận: Tái sử dụng Bằng chứng, Không phải Thông tin xác thực

Tự động hóa trình duyệt đáng tin cậy tạo ra một phiên làm việc được ủy quyền hẹp, xác minh nó và tái sử dụng bằng chứng đó trong các ngữ cảnh tách biệt. Nó không lặp lại thông tin xác thực trên mỗi trang hoặc coi việc xác thực thành công là quyền cho mọi hành động.

Giữ cho các artefact phiên làm việc ngắn hạn và được bảo vệ. Hãy để mọi người hoàn thành các lễ nghi an ninh được thiết kế cho con người. Sử dụng Scrapeless Scraping Browser khi quy trình làm việc đã được phê duyệt cần một phiên trình duyệt quản lý mà không di chuyển ranh giới ủy quyền vào nhà cung cấp đám mây.


Sẵn sàng Xây dựng Quy trình Trình duyệt Được ủy quyền?

Tham gia cộng đồng của chúng tôi để nhận một kế hoạch miễn phí và kết nối với các nhà phát triển đang xây dựng tự động hóa trình duyệt có kiểm soát: Discord · Telegram.

Đăng ký tại app.scrapeless.com để có runtime Scraping Browser miễn phí và áp dụng mẫu cô lập trạng thái vào một tài khoản mà bạn được phép tự động hóa.


Câu hỏi thường gặp

Q: Có hợp pháp để tự động hóa một trang web đã xác thực không?

Tự động hóa được ủy quyền có thể hợp pháp, nhưng câu trả lời phụ thuộc vào quyền hạn, hợp đồng, dữ liệu và hành động. Sử dụng một tài khoản sở hữu hoặc được phê duyệt rõ ràng, xem xét điều khoản và quy tắc quyền riêng tư của trang web, và tham khảo ý kiến luật sư cho quy trình làm việc cụ thể.

Q: Tự động hóa trình duyệt có nên lưu trữ mật khẩu hoặc phiên không?

Tự động hóa trình duyệt thường nên nhận các bí mật tại thời gian chạy, tạo một phiên làm việc ngắn hạn được ủy quyền và tái sử dụng trạng thái đã được bảo vệ. Một phiên đã lưu trữ vẫn là thông tin xác thực và cần mã hóa, kiểm soát quyền truy cập, hết hạn và xóa bỏ.

Q: Tự động hóa có thể xử lý MFA hoặc mã khóa không?

Tự động hóa có thể sử dụng các công cụ xác thực thử nghiệm trong một môi trường thử nghiệm sở hữu, nhưng bước MFA, mã khóa, sự đồng ý hoặc phê duyệt thiết bị sản xuất nên được giữ lại với người vận hành được ủy quyền. Tái sử dụng phiên kết quả chỉ trong phạm vi được phê duyệt của nó.

Q: Các quy trình làm việc đã xác thực có cần một proxy không?

Các quy trình làm việc đã xác thực có thể cần egress khu vực ổn định khi ứng dụng ràng buộc chính sách rủi ro hoặc nội dung vào vị trí địa lý. Gán quốc gia đã được phê duyệt cho phiên và không thay đổi khu vực trong một luồng danh tính.

Q: Điều gì nên xảy ra khi markup thay đổi?

Kiểm tra lại các bộ định vị dựa trên vai trò và việc xác nhận sau khi đăng nhập. Tình trạng xác thực và các bộ chọn DOM là những vấn đề riêng biệt; một phiên hợp lệ có thể đồng tồn tại với giao diện đã thay đổi.

Q: Một tài khoản đã xác thực nên sử dụng bao nhiêu song song?

Giữ không quá ba công nhân mỗi máy chủ trừ khi chủ sở hữu ứng dụng phê duyệt giới hạn khác, và sử dụng các tài khoản riêng biệt khi các công việc song song có thể thay đổi trạng thái bên server chung.

Q: Có thể chạy điều này mà không cần một đại lý AI không?

Có. Playwright và Scrapeless SDK có thể chạy toàn bộ quy trình được ủy quyền trực tiếp. Một đại lý AI là tùy chọn và nên hoạt động trong cùng một tài khoản, hành động và ranh giới phê duyệt.

Tại Scrapless, chúng tôi chỉ truy cập dữ liệu có sẵn công khai trong khi tuân thủ nghiêm ngặt các luật, quy định và chính sách bảo mật trang web hiện hành. Nội dung trong blog này chỉ nhằm mục đích trình diễn và không liên quan đến bất kỳ hoạt động bất hợp pháp hoặc vi phạm nào. Chúng tôi không đảm bảo và từ chối mọi trách nhiệm đối với việc sử dụng thông tin từ blog này hoặc các liên kết của bên thứ ba. Trước khi tham gia vào bất kỳ hoạt động cạo nào, hãy tham khảo ý kiến ​​cố vấn pháp lý của bạn và xem xét các điều khoản dịch vụ của trang web mục tiêu hoặc có được các quyền cần thiết.

Bài viết phổ biến nhất

Danh mục