Step 1: Valid request http to server
Step 2: Extracting HTML
That is OK??
I think NO!
When content (content you want to get) gen by javascript in client side (browser). You need eval JS code on backend side => content => save if you want. How?
Example:
HTML receive:
Node module safe-eval "safe-eval" (You need to understand before using)
Eval in backend side:
You can see prefix js code: '(function(){})();'
I have run many times and think this is a good way when eval js code.
Why safe-eval, not eval?
What do you think if you eval "process.exit();" ??
Even: safe-eval 0.3.0 and below are affected by a sandbox breakout vulnerability - NSP 337, CVE-2017-16088.
(when you safe-eval "this.constructor.constructor('return process')().exit()");
Continue. Please wait next !!!
Step 2: Extracting HTML
That is OK??
I think NO!
When content (content you want to get) gen by javascript in client side (browser). You need eval JS code on backend side => content => save if you want. How?
Example:
HTML receive:
<body>
    <script src="/test.js"></script>
    <script>
        document.body.innerHTML = '<a href="/post3">Link here</a>';
   </script>
</body>
Node module safe-eval "safe-eval" (You need to understand before using)
Eval in backend side:
var cheerio= require('cheerio');
var content= `<body>
<script src="/test.js"></script>
<script>
    document.body.innerHTML = '<a href="/post3">Link here</a>';
</script>
</body>`;
var $= cheerio.load(content);
var scriptMe= '(function(){})();'+ $('script:not([src])').eq(0).html();
var safeEval = require('safe-eval');
var context = {
    document: {
        body: {
            innerHTML: ''
        }
    }
};
safeEval(scriptMe, context);
console.log(context);
You can see prefix js code: '(function(){})();'
I have run many times and think this is a good way when eval js code.
Why safe-eval, not eval?
What do you think if you eval "process.exit();" ??
Even: safe-eval 0.3.0 and below are affected by a sandbox breakout vulnerability - NSP 337, CVE-2017-16088.
(when you safe-eval "this.constructor.constructor('return process')().exit()");
Continue. Please wait next !!!

Comments
Post a Comment