Maison >interface Web >Tutoriel H5 >À propos de la fenêtre CCF CSP

À propos de la fenêtre CCF CSP

坏嘻嘻
坏嘻嘻original
2018-09-14 14:02:162424parcourir

Attaque de script intersite XSS, contournant la même politique d'origine via de faux contenus et des appâts à clics. Il s’agit d’un gros problème, et si un attaquant réussit à injecter du code, une quantité considérable de données utilisateur peut être divulguée.

Description du problème

Dans un certain système d'exploitation graphique, il y a N fenêtres, chaque fenêtre est une zone rectangulaire dont les deux côtés sont parallèles à l'axe de coordonnées. . Les points situés au bord de la fenêtre appartiennent également à la fenêtre. Il existe des différences hiérarchiques entre les fenêtres. Dans une zone où plusieurs fenêtres se chevauchent, seul le contenu de la fenêtre de niveau supérieur sera affiché.
Lorsque vous cliquez sur un point de l'écran, vous sélectionnez la fenêtre de niveau supérieur à la position cliquée, et cette fenêtre sera déplacée au niveau supérieur de toutes les fenêtres, tandis que l'ordre hiérarchique des fenêtres restantes reste inchangé. Si l'emplacement sur lequel vous cliquez n'appartient à aucune fenêtre, le système ignorera votre clic.
Nous voulons maintenant que vous écriviez un programme pour simuler le processus de clic sur une fenêtre.

Format de saisie

La première ligne de saisie contient deux entiers positifs, à savoir N et M. (1 ≤ N ≤ 10,1 ≤ M ≤ 10)
 Les N lignes suivantes donnent les positions des N fenêtres dans l'ordre du bas vers le haut. Chaque ligne contient quatre entiers non négatifs x1, y1, x2, y2, indiquant une paire de coordonnées de sommet de la fenêtre (x1, y1) et (x2, y2). Il est garanti que x1 <
Chacune des M lignes suivantes contient deux entiers non négatifs x, y, représentant les coordonnées d'un clic de souris.
Les coordonnées x et y de tous les points et sommets du rectangle impliqué dans la question ne dépassent pas respectivement 2559 et 1439.

Format de sortie

La sortie comprend M lignes, chaque ligne représente le résultat d'un clic de souris. Si une fenêtre est sélectionnée par ce clic de souris, le numéro de cette fenêtre est affiché (les fenêtres sont numérotées de 1 à N dans l'ordre d'entrée) ; sinon, "IGNORED" (sans guillemets doubles) est affiché.

Exemple d'entrée

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

Exemple de sortie

2
1
1
IGNORÉ

Description de l'échantillon

La position cliqué pour la première fois appartient à la fois à la 1ère et à la 2ème fenêtre, mais comme la 2ème fenêtre est en haut, elle est sélectionnée et amenée en haut.
 La position du deuxième clic n'appartient qu'à la première fenêtre, donc ce clic sélectionne cette fenêtre et l'amène en haut. La relation hiérarchique entre les trois fenêtres est désormais exactement à l’opposé de l’état initial.
La position cliquée pour la troisième fois appartient à la plage de trois fenêtres en même temps, mais comme la première fenêtre est désormais en haut, elle est sélectionnée.
 Le dernier clic (0, 5) n'appartient à aucune fenêtre.

Analyse : Une question très simple, pas trop difficile, pour peu que la commande soit réglée.

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

Recommandations associées :

Introduction à la sécurité HTML5 Politique de sécurité du contenu (CSP) Introduction_html5 Compétences du didacticiel

html5 de base balises (balise vidéo html5 utilisation de la nouvelle balise html5)_compétences du didacticiel html5

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Articles Liés

Voir plus