Kheys, Administrateurs
13 204
modifications
user: f6cfbc7 (?) Aucun résumé des modifications |
Aucun résumé des modifications |
||
(19 versions intermédiaires par 10 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
{{Bannière Info|Contenu=Co-rédacteur de l'[[API|article sur l'API de JVC]], j'aurais besoin de l'aide d'un khey calé sur l'API de JVC et/ou le fonctionnement technique de jeuxvideo.com. J'ai plusieurs questions à poser en vue de la réalisation d'un projet informatique. (Edwado si tu passes par là…)<br> | |||
Merci de me contacter sur JVC (pseudo '''ContrapunctusI'''{{CDV|Pseudo=ContrapunctusI}}). Toute aide sera appréciée.}} | |||
== Introduction == | == Introduction == | ||
[[Jeuxvideo.com]] utilise 2 serveurs frontaux qui sont depuis le 7 mai 2022 protégés par le service [https://cloudflare.com Cloudflare]. Chaque serveur frontal utilise un serveur HTTP | [[Jeuxvideo.com]] utilise 2 serveurs frontaux qui sont depuis le 7 mai 2022 protégés par le service [https://cloudflare.com Cloudflare]. Chaque serveur frontal utilise un serveur HTTP Apache, tout ce qu'il y a de plus classique. En revanche, avant d'arriver sur le serveur Apache, on a plusieurs mailles dans la chaîne. En effet, lorsque vous faites une requête auprès de JVC, la chaîne suivante est effectuée avant d'arriver jusqu'au back-end : | ||
Cloudflare | Cloudflare → Round-robin entre les 2 serveurs frontaux → HAProxy → Varnish → Apache → PHP / Express (Node.js) | ||
== Processus d'une requête HTTP == | == Processus d'une requête HTTP == | ||
Ligne 11 : | Ligne 15 : | ||
'''HAProxy''' est un proxy et load-balancer TCP d'une efficacité remarquable, il est utilisé sur la totalité des environnements de production gérés par Webedia. C'est entre autre ce service à l'origine de l'erreur 403 Forbidden. En effet, HAProxy fait aussi office de protection applicative (on peut donc en déduire que JVC utilise plusieurs services sur couche haute pour protéger l'applicatif). On peut notamment remarquer le blacklistage des IPs du réseau "Tor", mais également le blacklistage des pools de l'AS 16276 (appartenant à la société OVH et n'étant utilisé que dans des contextes d'hébergement) - blocage mené suite à l'utilisation massive des services de la société OVH dans le but de scrapper/attaquer JVC. | '''HAProxy''' est un proxy et load-balancer TCP d'une efficacité remarquable, il est utilisé sur la totalité des environnements de production gérés par Webedia. C'est entre autre ce service à l'origine de l'erreur 403 Forbidden. En effet, HAProxy fait aussi office de protection applicative (on peut donc en déduire que JVC utilise plusieurs services sur couche haute pour protéger l'applicatif). On peut notamment remarquer le blacklistage des IPs du réseau "Tor", mais également le blacklistage des pools de l'AS 16276 (appartenant à la société OVH et n'étant utilisé que dans des contextes d'hébergement) - blocage mené suite à l'utilisation massive des services de la société OVH dans le but de scrapper/attaquer JVC. | ||
''' | '''Apache''' est un serveur HTTP. Il a été optimisé par l'équipe technique actuelle de Webedia, mais également par l'ancienne équipe du site (on peut notamment citer [[Dargor]] et [[Haazel]] en tant que personnes ayant participées à l'élaboration de tunning du serveur HTTP). | ||
Le dernier point est selon la page qui est demandée. Des parties du site sont développées en PHP, et d'autres en Node.js. Pour l'anecdote, le site est hébergé côté serveur dans le dossier /opt/datas/sites/JEUXVIDEO.COM/. Il n'y a quasiment aucune protection de ce côté (si ce n'est une protection contre les IPs Tor). | Le dernier point est selon la page qui est demandée. Des parties du site sont développées en PHP, et d'autres en Node.js. Pour l'anecdote, le site est hébergé côté serveur dans le dossier /opt/datas/sites/JEUXVIDEO.COM/<ref>La norme [https://fr.wikipedia.org/wiki/Filesystem_Hierarchy_Standard Filesystem Hierarchy Standard] n’incluait pas <code>/srv</code>, qui est plus approprié, avant 2004.</ref>. Il n'y a quasiment aucune protection de ce côté (si ce n'est une protection contre les IPs Tor). | ||
=== Protection applicative Cloudflare === | === Protection applicative Cloudflare === | ||
Ligne 21 : | Ligne 25 : | ||
=== Domaine de fichiers statiques === | === Domaine de fichiers statiques === | ||
'''static.jvc.gg''' est notamment utilisé pour servir les feuilles de styles et scripts et utilise | '''static.jvc.gg''' est notamment utilisé pour servir les feuilles de styles et scripts et utilise comme serveur '''nginx''' au lieu d'Apache. N’étant pas protégé par Cloudflare en janvier 2023 il permet d’avoir un aperçu technique de comment était servi l’ensemble du site avant la mise en place de Cloudflare. | ||
Côté DNS, cinq serveurs de noms sont utilisés : ns1.webedia-group.org, ns2.webedia-group.net, ns3.webedia-group.com, ns4.webedia-group.biz, ns5.webedia-group.app. Les deux premiers sont sur leur AS 35717 ; les trois derniers sont respectivement hébergés chez Scaleway, OVH, Gandi. | Côté DNS, cinq serveurs de noms sont utilisés : ns1.webedia-group.org, ns2.webedia-group.net, ns3.webedia-group.com, ns4.webedia-group.biz, ns5.webedia-group.app. Les deux premiers sont sur leur AS 35717 ; les trois derniers sont respectivement hébergés chez Scaleway, OVH, Gandi. | ||
Ligne 31 : | Ligne 35 : | ||
=== Les Cartes de visite === | === Les Cartes de visite === | ||
Les [[Carte de Visite|Cartes de visite]] étaient développés en PHP et avaient la particularité notable de stocker les données publiques de chaque utilisateur (par exemple, sa description personnelle) dans de simples fichiers HTML stockés sur disque : il n'y avait pas de requête SQL d'invoquée pour obtenir certaines données liées aux CDV. Lors de certains floods d'avis utilisateurs (notamment menés par | Les [[Carte de Visite|Cartes de visite]] étaient développés en PHP et avaient la particularité notable de stocker les données publiques de chaque utilisateur (par exemple, sa description personnelle) dans de simples fichiers HTML stockés sur disque : il n'y avait pas de requête SQL d'invoquée pour obtenir certaines données liées aux CDV. Lors de certains floods d'avis utilisateurs (notamment menés par ''UnifiedLinux''), les CDV retournaient aléatoirement des pages blanches. La cause est toujours inconnue. | ||
=== Les forums === | === Les forums === | ||
Ligne 39 : | Ligne 43 : | ||
=== Les articles === | === Les articles === | ||
Les | Les articles n'étaient pas mis en ligne immédiatement après leur rédaction. Un système de "compilation" était nécessaire et à effectuer manuellement afin que le site "compile" les articles pour qu'ils deviennent accessibles au public. On peut imaginer que ce système de compilation a été développé dans un but de gestion de charge applicative. | ||
=== Modération === | === Modération === | ||
Ligne 48 : | Ligne 52 : | ||
Le cookie [[wenvjgol]] était utilisé pour l'authentification. | Le cookie [[wenvjgol]] était utilisé pour l'authentification. | ||
=== La recherche des forums === | |||
La recherche des forums était connue pour être atrocement lente et affichant incorrectement la liste des résultats, des topics étaient manquants et s'affichaient une fois sur deux. | |||
=== Sécurité informatique === | |||
Lorsqu'une IP tentait d'envoyer trop de requêtes HTTP (HTTPS n'était pas déployé à ce moment-là), le site redirigeait chaque requête HTTP vers une erreur 404. La page d'erreur 404 étant très peu consommatrice techniquement, cela permettait de désaturer la charge serveur en cas de DoS/DDoS. | |||
Sur les CDV et les forums, il y a eu un grand nombre de failles XSS, notamment exploitées en masse par [[PyjamaSam]]. | |||
Le [[Captcha]] était également tout le temps cassé, permettant des floods de topics/messages/contributions. Cela a permis par exemple de créer un pseudo rang rubis en moins d'un jour, dont le pseudo était ''RubyOne'' (par ''UnifiedLinux'', qui a également créé un pseudo rang diamant en moins d'un jour via un flood de contributions). | |||
== Respawn == | == Respawn == | ||
Ligne 115 : | Ligne 131 : | ||
Le cookie [[coniunctio]] est utilisé pour l'authentification. | Le cookie [[coniunctio]] est utilisé pour l'authentification. | ||
=== Recherche des forums === | |||
La recherche des forums utilise le moteur de recherche Sphinx qui est intégré au site. La recherche des forums est limitée à 1 mois sur les blablas, elle peut être contournée via https://jvarchive.com/. | |||
=== Sécurité informatique === | |||
Dans les débuts de Respawn, le site était rempli de failles permettant de faire exploser la charge du site. Il existait également de nombreuses failles sur [[ForumJV]] qui permettaient de modérer sans être modérateur, sur n'importe quel forum. Les failles ici citées ont en majorité été exploitées par [[edwado]]. | |||
Il a également existé une faille RCE (Remote Code Execution) exploitée par [[Tsain]], qui permettait d'injecter du CSS sur n'importe quelle partie du site (la faille fut très mal exploitée étant-donné que celle-ci n'était pas qu'une simple injection CSS mais bien une RCE où il était possible d'injecter un shell PHP). | |||
=== JvCare === | === JvCare === | ||
JvCare est un | JvCare est un algorithme d'obfuscation des liens externes postés sur le site. Il a été développé depuis Respawn. Il permet d'éviter la création de backlinks qui pourraient optimiser indirectement le SEO de sites externes à Jeuxvideo.com. | ||
function jvCare(string $classe) : string { | Les codes ci-après permettent de décoder une chaîne obfusquée. | ||
==== PHP ==== | |||
function jvCare(string $classe) : string { | |||
$base16 = "0A12B34C56D78E9F";'' | |||
$lien = ""; | |||
$s = explode(" ", $classe)[1]; | |||
for ($i = 0; $i <= strlen($s)-1; $i += 2) { | |||
$lien .= chr(strrpos($base16, $s[$i]) * 16 + strrpos($base16, $s[$i+1])); | |||
} | |||
return $lien; | |||
} | } | ||
==== JavaScript ==== | |||
function jvCake(classe) { | function jvCake(classe) { | ||
const base16 = '0A12B34C56D78E9F'; | |||
let lien = <nowiki>''</nowiki>; | |||
const s = classe.split(' ')[1]; | |||
for (let i = 0; i < s.length; i += 2) { | |||
lien += String.fromCharCode(base16.indexOf(s.charAt(i)) * 16 + base16.indexOf(s.charAt(i + 1))); | |||
} | |||
return lien; | |||
} | |||
==== Python ==== | |||
def jvcare(classe: str) -> str: | |||
base16 = '0A12B34C56D78E9F' | |||
url = <nowiki>''</nowiki> | |||
s = classe.split()[1] | |||
for i, j in zip(s[0::2], s[1::2]): | |||
url += chr(base16.index(i) * 16 + base16.index(j)) | |||
return url | |||
==== C ==== | |||
const char *__jvcarebase16 = "0A12B34C56D78E9F"; | |||
char *jvcare(const char *class) { | |||
char *s = strchr(class, ' ') + 1; | |||
int urllen = strlen(s) / 2; | |||
char *url = malloc(urllen + 1); | |||
for (int i = 0; i < urllen; i++) { | |||
char pos1 = strchr(__jvcarebase16, s[i * 2]) - __jvcarebase16; | |||
char pos2 = strchr(__jvcarebase16, s[i * 2 + 1]) - __jvcarebase16; | |||
url[i] = pos1 * 16 + pos2; | |||
} | |||
url[urllen] = '\0'; | |||
return url; | |||
} | } | ||
== Phoenix == | == Phoenix == | ||
Phoenix est une partie de JVC développée en Node.js. Elle semble de plus en plus abandonnée, et nous n'avons pas beaucoup d'informations à son sujet. | Phoenix est une partie de JVC développée en Node.js et utilisant React. Elle semble de plus en plus abandonnée, et nous n'avons pas beaucoup d'informations à son sujet. Phoenix utilise une API spéciale hébergée au sous-domaine [[Documentation_de_l%27API_Jeuxvideo.com#API_jvc.gg|''api.jvc.gg'']]. | ||
== Liens externes == | |||
* [http://www.journaldunet.com/solutions/itws/050426_it_jeuxvideo.shtml Interview sur l’architecture de jeuxvideo.com de 1997 à 2005] ([http://web.archive.org/web/20070629165914/http://www.journaldunet.com/solutions/itws/050426_it_jeuxvideo.shtml archive.org]) | |||
== Notes == | |||
<references /> | <references /> | ||
Ligne 152 : | Ligne 216 : | ||
* [[Documentation de l'API Jeuxvideo.com]] | * [[Documentation de l'API Jeuxvideo.com]] | ||
{{SectionRéférences}} | |||
{{TableauCatégorieFonctionnementJVC}} | |||
[[Catégorie:Fonctionnement technique de Jeuxvideo.com]] | |||
[[Catégorie:Extensions et outils]] | [[Catégorie:Extensions et outils]] | ||