libencode.inc.php 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. // Librairie de fonctions de sécurité de l'application web.
  3. // Encryptage d'une chaîne de caractères
  4. // Décalage 23
  5. function strEncryption($valeurzchaine) {
  6. $retour = "";
  7. for ($x = 0;
  8. $x < strlen($valeurzchaine);
  9. $x++) {
  10. $valeurcible = chr(ord(substr($valeurzchaine, $x, 1)) + 23);
  11. $retour .= $valeurcible;
  12. }
  13. return $retour;
  14. }
  15. // Décryptage d'une chaîne de caractères
  16. // Décalage 23
  17. function strDecryption($valeurzchaine) {
  18. $retour = "";
  19. for ($x = 0;
  20. $x < strlen($valeurzchaine);
  21. $x++) {
  22. $valeurcible = chr(ord(substr($valeurzchaine, $x, 1)) - 23);
  23. $retour .= $valeurcible;
  24. }
  25. return $retour;
  26. }
  27. // Fonction pour recueillir les clefs et leur valeurs de la méthode POST
  28. function getPostVars() {
  29. $queryString = "";
  30. if (filter_input_array(INPUT_POST)) {
  31. foreach (filter_input_array(INPUT_POST) as $clef => $valeur) {
  32. $kv[] = "r$clef=$valeur";
  33. }
  34. $queryString = join("&", $kv);
  35. } else {
  36. $queryString = filter_input(INPUT_SERVERm, 'QUERY_STRING', FILTER_SANITIZE_STRING);
  37. }
  38. return $queryString;
  39. }
  40. // Fonction de filtre pour les champs passés à une requête SQL (SQL injection)
  41. function antiInjection($souschaine) {
  42. $banlist = array(
  43. "insert", "select", "update", "delete", "distinct", "having", "truncate", "replace", "and",
  44. "handler", "like", "as", "or", "procedure", "limit", "order", "group", "asc", "outfile", "desc",
  45. "load_file", "exec", "||", "|", "&", "=", "--", "javascript"
  46. );
  47. $tablo = array();
  48. if (empty($souschaine)) {
  49. return null;
  50. }
  51. $souschaine2 = stripslashes($souschaine);
  52. if (is_array($souschaine2)) {
  53. return array_map(__METHOD__, $souschaine2);
  54. }
  55. if (!empty($souschaine2) && is_string($souschaine2)) {
  56. return str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"),
  57. array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z'),
  58. $souschaine2);
  59. }
  60. if (strpos($souschaine2, " ") === false) {
  61. $tablo[0] = $souschaine2;
  62. } else {
  63. $tablo = explode(" ", $souschaine2);
  64. }
  65. // TODO permettre les mots qui contiennent le mot banni
  66. // ex: meteore contient le mot «or».
  67. // SG 2023-10-28
  68. foreach ($tablo as $cle => $element) {
  69. foreach ($banlist as $elementban) {
  70. $pos = strpos(trim($element), $elementban);
  71. if (!($pos === false) && strlen($element) == strlen($elementban)) {
  72. $cle = "";
  73. }
  74. }
  75. }
  76. $retourchaine = trim(implode(" ", $tablo));
  77. if (strlen($retourchaine) == 0) {
  78. return null;
  79. } else {
  80. //Remplacer l'apostrophe par son équivalent HTML
  81. return str_replace("'", "&apos;", trim($retourchaine));
  82. }
  83. }