xss.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import loggerFactory from '~/utils/logger';
  2. const logger = loggerFactory('growi:service:XssSerivce'); // eslint-disable-line no-unused-vars
  3. const Xss = require('~/services/xss');
  4. const { tags, attrs } = require('~/services/xss/recommended-whitelist');
  5. /**
  6. * the service class of XssSerivce
  7. */
  8. class XssSerivce {
  9. constructor(configManager) {
  10. this.configManager = configManager;
  11. this.xss = new Xss();
  12. }
  13. process(value) {
  14. return this.xss.process(value);
  15. }
  16. getTagWhitelist() {
  17. const isEnabledXssPrevention = this.configManager.getConfig('markdown', 'markdown:xss:isEnabledPrevention');
  18. const xssOpiton = this.configManager.getConfig('markdown', 'markdown:xss:option');
  19. if (isEnabledXssPrevention) {
  20. switch (xssOpiton) {
  21. case 1: // ignore all: use default option
  22. return [];
  23. case 2: // recommended
  24. return tags;
  25. case 3: // custom whitelist
  26. return this.configManager.getConfig('markdown', 'markdown:xss:tagWhitelist');
  27. default:
  28. return [];
  29. }
  30. }
  31. else {
  32. return [];
  33. }
  34. }
  35. getAttrWhitelist() {
  36. const isEnabledXssPrevention = this.configManager.getConfig('markdown', 'markdown:xss:isEnabledPrevention');
  37. const xssOpiton = this.configManager.getConfig('markdown', 'markdown:xss:option');
  38. if (isEnabledXssPrevention) {
  39. switch (xssOpiton) {
  40. case 1: // ignore all: use default option
  41. return [];
  42. case 2: // recommended
  43. return attrs;
  44. case 3: // custom whitelist
  45. return this.configManager.getConfig('markdown', 'markdown:xss:attrWhitelist');
  46. default:
  47. return [];
  48. }
  49. }
  50. else {
  51. return [];
  52. }
  53. }
  54. }
  55. module.exports = XssSerivce;