PurifierSecurity.php 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. namespace app\common\library;
  3. use think\Config;
  4. class PurifierSecurity
  5. {
  6. /**
  7. *
  8. * @var HTMLPurifier singleton instance of the HTML Purifier object
  9. */
  10. protected static $htmlpurifier;
  11. /**
  12. * Purifier factory
  13. */
  14. public static function factory()
  15. {
  16. // Create a new configuration object
  17. $config = \HTMLPurifier_Config::createDefault();
  18. if (! Config::get('purifier.finalize')) {
  19. // Allow configuration to be modified
  20. $config->autoFinalize = FALSE;
  21. }
  22. // Use the same character set as Kohana
  23. $config->set('Core.Encoding', 'UTF-8');
  24. if (is_array($settings = Config::get('purifier.settings'))) {
  25. // Load the settings
  26. $config->loadArray($settings);
  27. }
  28. // Configure additional options
  29. $config = self::configure($config);
  30. // Create the purifier instance
  31. return new \HTMLPurifier($config);
  32. }
  33. /**
  34. *
  35. *
  36. * $purifier = Security::htmlpurifier();
  37. *
  38. * @return \HTMLPurifier
  39. */
  40. public static function htmlpurifier()
  41. {
  42. if (! self::$htmlpurifier) {
  43. // Create the purifier instance
  44. self::$htmlpurifier = self::factory();
  45. }
  46. return self::$htmlpurifier;
  47. }
  48. /**
  49. *
  50. * @param HTMLPurifier_Config configuration object
  51. * @return \HTMLPurifier_Config
  52. */
  53. public static function configure(\HTMLPurifier_Config $config)
  54. {
  55. return $config;
  56. }
  57. /**
  58. *
  59. * @param mixed text to clean, or an array to clean recursively
  60. * @return mixed
  61. */
  62. public static function xssClean($str)
  63. {
  64. if (is_array($str)) {
  65. foreach ($str as $i => $s) {
  66. // Recursively clean arrays
  67. $str[$i] = self::xssClean($s);
  68. }
  69. return $str;
  70. }
  71. // Load HTML Purifier
  72. $purifier = self::htmlpurifier();
  73. // Clean the HTML and return it
  74. return $purifier->purify($str);
  75. }
  76. }