« Fonctionnement technique de Jeuxvideo.com » : différence entre les versions

Bannière info (lien vers API)
user: 8caaae5 (?)
(+ sécurité informatique, avant/pendant respawn)
(Bannière info (lien vers API))
(18 versions intermédiaires par 5 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
{{Bannière Info|Contenu=Cette page détaille le fonctionnement technique de jeuxvideo.com. L'API v4 du site est quant à elle documentée sur [[Documentation de l'API Jeuxvideo.com]].}}
== 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 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 :
[[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 :
Ligne 31 : Ligne 33 :
=== 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 [[UnifiedLinux]] et [[edwado]]), les CDV retournaient aléatoirement des pages blanches. La cause est toujours inconnue.
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 41 :
=== Les articles ===
=== Les articles ===


Les [[Article|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.
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 59 : Ligne 61 :
Sur les CDV et les forums, il y a eu un grand nombre de failles XSS, notamment exploitées en masse par [[PyjamaSam]].
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, tout comme [[edwado]]).
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 140 : Ligne 142 :
=== JvCare ===
=== JvCare ===


JvCare est un étrange algorithme d'obfuscation développé avec Respawn. Il est notamment distingué dans les sources HTML des pages du site, et semble destiné à obfusquer des URLs.
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.


Les codes ci-après permettent de décoder une chaîne obfusquée.
Les codes ci-après permettent de décoder une chaîne obfusquée.
Ligne 147 : Ligne 149 :


  function jvCare(string $classe) : string {
  function jvCare(string $classe) : string {
   $base16 = "0A12B34C56D78E9F";''
   static $base16 = "0A12B34C56D78E9F";
   $lien = "";
   $lien = "";
   $s = explode(" ", $classe)[1];
   $s = explode(" ", $classe)[1];
   for ($i = 0; $i <= strlen($s)-1; $i += 2) {
   for ($i = 0; $i < strlen($s); $i += 2) {
     $lien .= chr(strrpos($base16, $s[$i]) * 16 + strrpos($base16, $s[$i+1]));
     $lien .= chr(strrpos($base16, $s[$i]) * 16 + strrpos($base16, $s[$i + 1]));
   }
   }
   return $lien;
   return $lien;
Ligne 163 : Ligne 165 :
   const s = classe.split(' ')[1];
   const s = classe.split(' ')[1];
   for (let i = 0; i < s.length; i += 2) {
   for (let i = 0; i < s.length; i += 2) {
     lien += String.fromCharCode(base16.indexOf(s.charAt(i)) * 16 + base16.indexOf(s.charAt(i + 1)));
     lien += String.fromCharCode(base16.indexOf(s.at(i)) * 16 + base16.indexOf(s.at(i + 1)));
   }
   }
   return lien;
   return lien;
}
===== Fonctionnel =====
function jvCake(classe) {
  const base16 = '0A12B34C56D78E9F';
  const s = classe.split(' ')[1];
  const codeUnits = s
    .match(/../g)
    .map((i) => base16.indexOf(i[0]) * 16 + base16.indexOf(i[1]));
  return String.fromCharCode(...codeUnits);
  }
  }


Ligne 171 : Ligne 184 :


  def jvcare(classe: str) -> str:
  def jvcare(classe: str) -> str:
  base16 = '0A12B34C56D78E9F'
    base16 = '0A12B34C56D78E9F'
  url = <nowiki>''</nowiki>
    s = classe.split()[1]
  s = classe.split()[1]
    url = <nowiki>''</nowiki>
  for i, j in zip(s[0::2], s[1::2]):
    for i, j in zip(s[0::2], s[1::2]):
    url += chr(base16.index(i) * 16 + base16.index(j))
        url += chr(base16.index(i) * 16 + base16.index(j))
  return url
    return url
 
===== Liste en compréhension =====
 
def jvcare(classe: str) -> str:
    base16 = '0A12B34C56D78E9F'
    s = classe.split()[1]
    return <nowiki>''</nowiki>.join([chr(base16.index(i) * 16 + base16.index(j)) for i, j in zip(s[0::2], s[1::2])])


==== C ====
==== C ====


#include <stdlib.h>
#include <string.h>
  const char *__jvcarebase16 = "0A12B34C56D78E9F";
  const char *__jvcarebase16 = "0A12B34C56D78E9F";
   
   
  char *jvcare(const char *class) {
  char *jvcare(const char *class) {
  char *s = strchr(class, ' ') + 1;
    char *s = strchr(class, ' ') + 1;
   
   
  int urllen = strlen(s) / 2;
    int urllen = strlen(s) / 2;
  char *url = malloc(urllen + 1);
    char *url = malloc(urllen + 1);
  for (int i = 0; i < urllen; i++) {
    for (int i = 0; i < urllen; i++) {
    char pos1 = strchr(__jvcarebase16, s[i * 2]) - __jvcarebase16;
        char pos1 = strchr(__jvcarebase16, s[i * 2]) - __jvcarebase16;
    char pos2 = strchr(__jvcarebase16, s[i * 2 + 1]) - __jvcarebase16;
        char pos2 = strchr(__jvcarebase16, s[i * 2 + 1]) - __jvcarebase16;
    url[i] = pos1 * 16 + pos2;
        url[i] = pos1 * 16 + pos2;
  }
    }
  url[urllen] = '\0';
    url[urllen] = '\0';
  return url;
    return url;
}
 
==== Awk ====
 
BEGIN {
    base16 = "0A12B34C56D78E9F"
}
{
    s = $2
    for (i = 1; i < length(s); i += 2) {
        pos1 = index(base16, substr(s, i, 1))
        pos2 = index(base16, substr(s, i + 1, 1))
        url = url sprintf("%c", (pos1 - 1) * 16 + (pos2 - 1))
    }
    print url
  }
  }


== Phoenix ==
== Phoenix ==


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 était une partie de JVC développée en Node.js et utilisant React. De plus en plus abandonnée au fil du temps, elle était utilisée pour afficher la liste des jeux et des contenus de la rédaction. Phoenix utilisait une API spéciale hébergée au sous-domaine [[Documentation_de_l%27API_Jeuxvideo.com#API_jvc.gg|''api.jvc.gg'']]. Phoenix ainsi que l'API GG disparaissent en février 2025 et les pages qu'elles servaient sont basculées vers la partie principale du site.


== Liens externes ==
== Liens externes ==
Ligne 215 : Ligne 253 :
{{TableauCatégorieFonctionnementJVC}}
{{TableauCatégorieFonctionnementJVC}}


[[Catégorie:Fonctionnement de jeuxvideo.com]]
[[Catégorie:Fonctionnement technique de Jeuxvideo.com]]
[[Catégorie:Extensions et outils]]
[[Catégorie:Extensions et outils]]
{{TableauCatégories}}
Kheys
423

modifications