XSS 크로스 사이트 스크립팅 공격, 가짜 콘텐츠와 클릭 미끼를 통해 동일 출처 정책을 우회합니다. 이는 큰 문제이며, 공격자가 코드 삽입에 성공하면 상당한 양의 사용자 데이터가 유출될 수 있습니다.
문제 설명
특정 그래픽 운영 체제에는 N개의 창이 있고 각 창은 양쪽이 좌표축에 평행한 직사각형 영역입니다. 창 경계에 있는 점도 창에 속합니다. 창 간에는 계층적 차이가 있습니다. 두 개 이상의 창이 겹치는 영역에서는 최상위 창의 내용만 표시됩니다.
화면의 한 지점을 클릭하면 클릭한 위치의 최상위 창을 선택하게 되며, 이 창은 모든 창의 최상위 창으로 이동되며 나머지 창의 계층 순서는 변경되지 않습니다. 클릭한 위치가 어떤 창에도 속하지 않는 경우 시스템은 클릭을 무시합니다.
이제 창을 클릭하는 과정을 시뮬레이션하는 프로그램을 작성해 보겠습니다.입력 형식
입력의 첫 번째 줄에는 두 개의 양의 정수, 즉 N과 M이 포함됩니다. (1 N 10,1 M 10)
다음 N줄은 N개의 창 위치를 아래에서 위로 순서대로 나타냅니다. 각 줄에는 창 (x1, y1) 및 (x2, y2)의 정점 좌표 쌍을 나타내는 음이 아닌 정수 4개 x1, y1, x2, y2가 포함되어 있습니다. x1 다음 M 줄에는 각각 마우스 클릭의 좌표를 나타내는 두 개의 음수가 아닌 정수 x, y가 포함됩니다.
문제에 포함된 모든 점과 직사각형의 꼭지점의 x 및 y 좌표는 각각 2559와 1439를 초과하지 않습니다.출력 형식
출력에는 M줄이 포함되며, 각 줄은 마우스 클릭의 결과를 나타냅니다. 이 마우스 클릭으로 창을 선택하면 이 창의 번호가 출력됩니다(창은 입력 순서대로 1부터 N까지 번호가 지정됨). 그렇지 않으면 "IGNORED"(큰따옴표 제외)가 출력됩니다.
샘플 입력
3 4
0 0 4 4
1 1 5 5
2 2 6 6
1 1
0 0
4 4
0 5샘플 출력
2
1
1
무시설명 예시
처음 클릭한 위치는 1번 창과 2번 창에 모두 속하지만, 2번 창이 맨 위에 있으므로 선택되어 맨 위로 올라옵니다.
두 번째 클릭의 위치는 첫 번째 창에만 속하므로 이 클릭을 하면 이 창을 선택하여 맨 위로 가져옵니다. 이제 세 창 사이의 계층 관계는 초기 상태와 정반대입니다.
세 번째 클릭한 위치는 동시에 3개의 창 범위에 속하지만, 이제 첫 번째 창이 맨 위에 있으므로 선택됩니다.
마지막 클릭(0, 5)은 어떤 창에도 속하지 않습니다.
분석: 순서대로만 정리하면 그리 어렵지도 않은 아주 간단한 질문입니다.
#include <iostream> #include<vector> using namespace std; int main() { int N, M; cin >> N >> M; vector<int>win; vector<int>::iterator it; for (int i = N; i > 0; i--) { win.push_back(i); } int position[11][4]; int cli[13][2]; for (int i = 1; i <= N; i++) { for (int j = 0; j < 4; j++) { cin >> position[i][j]; } } for (int i = 0; i < M; i++) { for (int j = 0; j < 2; j++)//由于写这个的时候精神状态不是很好,原来写成j>2了。后来实在找不到哪里错了,只好把for循环重写了一遍。 { cin >> cli[i][j]; } } for (int i = 0; i < M; i++) { bool you = true; for (int j = 0; j < N; j++) { if (cli[i][0] >= position[win[j]][0] && cli[i][0] <= position[win[j]][2] && cli[i][1] >= position[win[j]][1] && cli[i][1] <= position[win[j]][3]) { cout << win[j] << endl; you = false; if (j != 0) { int a = win[j]; for (it = win.begin(); it != win.end();) { if (*it == a) { it = win.erase(it); // break; } //删除元素,返回值指向已删除元素的下一个位置 else { ++it; } //指向下一个位置 } win.insert(win.begin(), a); } break; } } if (you) { cout << "IGNORED" << endl; } } return 0; }
관련 권장 사항:
HTML5 보안 소개 - 콘텐츠 보안 정책(CSP) 소개_html5 튜토리얼 기술
html5 기본 태그(html5 비디오 태그 html5 새 태그 사용)_html5 튜토리얼 기술
위 내용은 CCF CSP 창 정보의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!