国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
3.7KB

  1. <?php
  2. if (!defined('DEDEINC')) exit ('dedebiz');
  3. /**
  4. * 防采集混淆字符串
  5. *
  6. * @version $id:downmix.inc.php 9:14 2010年7月6日 tianya $
  7. * @package DedeBIZ.Libraries
  8. * @copyright Copyright (c) 2022 DedeBIZ.COM
  9. * @license https://www.dedebiz.com/license
  10. * @link https://www.dedebiz.com
  11. */
  12. /**
  13. * 混淆字符串文档
  14. *
  15. * @access public
  16. * @param string $body 文档
  17. * @return string
  18. */
  19. if (!function_exists('RndString')) {
  20. function RndString(&$body)
  21. {
  22. //最大间隔距离(如果在检测不到p标记的情况下,加入混淆字串的最大间隔距离)
  23. $maxpos = 1024;
  24. //font 的字体颜色
  25. $fontColor = "#ffffff";
  26. //div span p 标记的随机样式
  27. $st1 = chr(mt_rand(ord('A'), ord('Z'))).chr(mt_rand(ord('a'), ord('z'))).chr(mt_rand(ord('a'), ord('z'))).mt_rand(100, 999);
  28. $st2 = chr(mt_rand(ord('A'), ord('Z'))).chr(mt_rand(ord('a'), ord('z'))).chr(mt_rand(ord('a'), ord('z'))).mt_rand(100, 999);
  29. $st3 = chr(mt_rand(ord('A'), ord('Z'))).chr(mt_rand(ord('a'), ord('z'))).chr(mt_rand(ord('a'), ord('z'))).mt_rand(100, 999);
  30. $st4 = chr(mt_rand(ord('A'), ord('Z'))).chr(mt_rand(ord('a'), ord('z'))).chr(mt_rand(ord('a'), ord('z'))).mt_rand(100, 999);
  31. $rndstyle[1]['value'] = ".{$st1} { display:none; }";
  32. $rndstyle[1]['name'] = $st1;
  33. $rndstyle[2]['value'] = ".{$st2} { display:none; }";
  34. $rndstyle[2]['name'] = $st2;
  35. $rndstyle[3]['value'] = ".{$st3} { display:none; }";
  36. $rndstyle[3]['name'] = $st3;
  37. $rndstyle[4]['value'] = ".{$st4} { display:none; }";
  38. $rndstyle[4]['name'] = $st4;
  39. $mdd = mt_rand(1, 4);
  40. $rndstyleValue = $rndstyle[$mdd]['value'];
  41. $rndstyleName = $rndstyle[$mdd]['name'];
  42. $reString = "<style> $rndstyleValue </style>\r\n";
  43. //附机标记
  44. $rndem[1] = 'font';
  45. $rndem[2] = 'div';
  46. $rndem[3] = 'span';
  47. $rndem[4] = 'p';
  48. //读取字符串数据
  49. $fp = fopen(DEDEDATA.'/downmix.data.inc', 'r');
  50. $start = 0;
  51. $totalitem = 0;
  52. while (!feof($fp)) {
  53. $v = trim(fgets($fp, 128));
  54. if ($start == 1) {
  55. if (preg_match("/#end#/i", $v)) {
  56. break;
  57. }
  58. if ($v != '') {
  59. $totalitem++;
  60. $rndstring[$totalitem] = preg_replace("/#,/", "", $v);
  61. }
  62. }
  63. if (preg_match("/#start#/i", $v)) {
  64. $start = 1;
  65. }
  66. }
  67. fclose($fp);
  68. //处理要防采集的字段
  69. $bodylen = strlen($body) - 1;
  70. $prepos = 0;
  71. for ($i = 0; $i <= $bodylen; $i++) {
  72. if ($i + 2 >= $bodylen || $i < 50) {
  73. $reString .= $body[$i];
  74. } else {
  75. $ntag = @strtolower($body[$i].$body[$i + 1].$body[$i + 2]);
  76. if ($ntag == '</p' || ($ntag == '<br' && $i - $prepos > $maxpos)) {
  77. $dd = mt_rand(1, 4);
  78. $emname = $rndem[$dd];
  79. $dd = mt_rand(1, $totalitem);
  80. $rnstr = $rndstring[$dd];
  81. if ($emname != 'font') {
  82. $rnstr = " <$emname class='$rndstyleName'>$rnstr</$emname> ";
  83. } else {
  84. $rnstr = " <span style='$fontColor'>$rnstr</span>";
  85. }
  86. $reString .= $rnstr.$body[$i];
  87. $prepos = $i;
  88. } else {
  89. $reString .= $body[$i];
  90. }
  91. }
  92. }
  93. return $reString;
  94. } //函数结束
  95. }
  96. ?>