Heim  >  Artikel  >  Web-Frontend  >  Über das CCF CSP-Fenster

Über das CCF CSP-Fenster

坏嘻嘻
坏嘻嘻Original
2018-09-14 14:02:162327Durchsuche

XSS-Cross-Site-Scripting-Angriff, der die Same-Origin-Richtlinie durch gefälschte Inhalte und Klickköder umgeht. Dies ist ein großes Problem, und wenn ein Angreifer erfolgreich Code einschleust, kann eine beträchtliche Menge an Benutzerdaten verloren gehen.

Problembeschreibung

In einem bestimmten Grafikbetriebssystem gibt es N Fenster, jedes Fenster ist ein rechteckiger Bereich, dessen beide Seiten parallel zur Koordinatenachse sind. . Punkte am Rand des Fensters gehören ebenfalls zum Fenster. Es gibt hierarchische Unterschiede zwischen Fenstern. In einem Bereich, in dem sich mehrere Fenster überlappen, wird nur der Inhalt des Fensters der obersten Ebene angezeigt.
Wenn Sie auf einen Punkt auf dem Bildschirm klicken, wählen Sie das Fenster der obersten Ebene an der angeklickten Position aus und dieses Fenster wird auf die oberste Ebene aller Fenster verschoben, während die hierarchische Reihenfolge der übrigen Fenster unverändert bleibt. Wenn die Stelle, auf die Sie klicken, zu keinem Fenster gehört, ignoriert das System Ihren Klick.
Jetzt möchten wir, dass Sie ein Programm schreiben, um den Vorgang des Klickens auf ein Fenster zu simulieren.

Eingabeformat

Die erste Eingabezeile enthält zwei positive ganze Zahlen, nämlich N und M. (1 ≤ N ≤ 10,1 ≤ M ≤ 10)
 Die nächsten N Zeilen geben die Positionen von N Fenstern in der Reihenfolge von unten nach oben an. Jede Zeile enthält vier nicht negative ganze Zahlen x1, y1, x2, y2, die ein Paar Scheitelpunktkoordinaten des Fensters (x1, y1) und (x2, y2) angeben. Es ist garantiert, dass x1 <
Jede der nächsten M Zeilen enthält zwei nicht negative ganze Zahlen x, y, die die Koordinaten eines Mausklicks darstellen.
Die x- und y-Koordinaten aller Punkte und Eckpunkte des in die Frage einbezogenen Rechtecks ​​überschreiten nicht 2559 bzw. 1439.

Ausgabeformat

Die Ausgabe umfasst M Zeilen, jede Zeile stellt das Ergebnis eines Mausklicks dar. Wird durch diesen Mausklick ein Fenster ausgewählt, wird die Nummer dieses Fensters ausgegeben (Fenster werden in der Reihenfolge der Eingabe von 1 bis N nummeriert); andernfalls wird „IGNORED“ (ohne doppelte Anführungszeichen) ausgegeben.

Beispieleingabe

3 4
0 0 4 4
1 1 5 5
2 2 6 6
1 1
0 0
4 4
0 5

Beispielausgabe

2
1
1
IGNORIERT

Beispielbeschreibung

Die Position Das zum ersten Mal angeklickte Fenster gehört sowohl zum 1. als auch zum 2. Fenster. Da sich das 2. Fenster jedoch oben befindet, wird es ausgewählt und nach oben verschoben.
 Die Position des zweiten Klicks gehört nur zum ersten Fenster, daher wählt dieser Klick dieses Fenster aus und bringt es nach oben. Die hierarchische Beziehung zwischen den drei Fenstern ist nun genau das Gegenteil des Ausgangszustands.
Die zum dritten Mal angeklickte Position gehört zum Bereich von drei Fenstern gleichzeitig, aber da das erste Fenster nun oben liegt, ist es ausgewählt.
 Der zuletzt angeklickte Wert (0, 5) gehört zu keinem Fenster.

Analyse: Eine sehr einfache Frage, nicht zu schwierig, solange die Reihenfolge geklärt ist.

#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;
}

Verwandte Empfehlungen:

HTML5-Sicherheitseinführung Einführung in die Content Security Policy (CSP)_html5 Tutorial-Fähigkeiten

html5 Basic Tags (HTML5-Video-Tag, Verwendung neuer HTML5-Tags)_HTML5-Tutorial-Fähigkeiten

Das obige ist der detaillierte Inhalt vonÜber das CCF CSP-Fenster. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn