SelfDefendingTemplate.ts 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import { IEscapeSequenceEncoder } from '../../../interfaces/utils/IEscapeSequenceEncoder';
  2. /**
  3. * SelfDefendingTemplate. Enter code in infinity loop.
  4. *
  5. * @param {IEscapeSequenceEncoder} escapeSequenceEncoder
  6. * @returns {string}
  7. */
  8. export function SelfDefendingTemplate (escapeSequenceEncoder: IEscapeSequenceEncoder): string {
  9. return `
  10. const selfDefendingFunc = function () {
  11. const object = {
  12. data: {
  13. key: 'cookie',
  14. value: 'timeout'
  15. },
  16. setCookie: function (options, name, value, document) {
  17. document = document || {};
  18. let updatedCookie = name + "=" + value;
  19. let i = 0;
  20. for (let i = 0, len = options.length; i < len; i++) {
  21. const propName = options[i];
  22. updatedCookie += "; " + propName;
  23. const propValue = options[propName];
  24. options.push(propValue);
  25. len = options.length;
  26. if (propValue !== true) {
  27. updatedCookie += "=" + propValue;
  28. }
  29. }
  30. document['cookie'] = updatedCookie;
  31. },
  32. removeCookie: function(){return 'dev';},
  33. getCookie: function (document, name) {
  34. document = document || function (value) { return value };
  35. const matches = document(new RegExp(
  36. "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
  37. ));
  38. const func = function (param1, param2) {
  39. param1(++param2);
  40. };
  41. func({whileFunctionName}, {timesName});
  42. return matches ? decodeURIComponent(matches[1]) : undefined;
  43. }
  44. };
  45. const test1 = function () {
  46. const regExp = new RegExp('${
  47. escapeSequenceEncoder.encode('\\w+ *\\(\\) *{\\w+ *[\'|"].+[\'|"];? *}', true)
  48. }');
  49. return regExp.test(object.removeCookie.toString());
  50. };
  51. object['updateCookie'] = test1;
  52. let cookie = '';
  53. const result = object['updateCookie']();
  54. if (!result) {
  55. object['setCookie'](['*'], 'counter', 1);
  56. } else if (result) {
  57. cookie = object['getCookie'](null, 'counter');
  58. } else {
  59. object['removeCookie']();
  60. }
  61. };
  62. selfDefendingFunc();
  63. `;
  64. }