เด’เดฐเต เด…เดชเด•เดŸเดธเดพเดงเตเดฏเดคเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต...

เด’เดฐเต เด…เดชเด•เดŸเดธเดพเดงเตเดฏเดคเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต...

เด’เดฐเต เดตเตผเดทเด‚ เดฎเตเดฎเตเดชเต, เดฎเดพเตผเดšเตเดšเต 21, 2019, at เดฌเด—เต เดฌเต—เดฃเตเดŸเดฟ เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ Mail.Ru เดตเดณเดฐเต† เดจเดฒเตเดฒ เด’เดจเตเดจเต HackerOne-เตฝ เดตเดจเตเดจเต เดฌเด—เต เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเต ะพั‚ maxarr. เด’เดฐเต เดŽเดšเตเดšเตเดŸเดฟเดŸเดฟเดชเดฟ เดฑเต€เดกเดฏเดฑเด•เตโ€ŒเดŸเต เดจเตฝเด•เดฟเดฏ เดตเต†เดฌเตโ€Œเดฎเต†เดฏเดฟเตฝ API เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเดฟเดฒเตŠเดจเตเดจเดฟเดจเตเดฑเต† POST เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดธเต€เดฑเต‹ เดฌเตˆเดฑเตเดฑเต (ASCII 0) เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดฑเต€เดกเดฏเดฑเด•เตโ€ŒเดŸเต เดกเดพเดฑเตเดฑเดฏเดฟเตฝ เด†เดฐเด‚เดญเดฟเด•เตเด•เดพเดคเตเดค เดฎเต†เดฎเตเดฎเดฑเดฟเดฏเตเดŸเต† เดญเดพเด—เด™เตเด™เตพ เดฆเตƒเดถเตเดฏเดฎเดพเดฃเต, เด…เดคเดฟเตฝ GET เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดถเด•เดฒเด™เตเด™เดณเตเด‚ เดฎเดฑเตเดฑเต เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต† เดคเดฒเด•เตเด•เต†เดŸเตเดŸเตเด•เดณเตเด‚ เด’เดฐเต‡ เดธเต†เตผเดตเตผ.

เด‡เดคเตŠเดฐเต เดจเดฟเตผเดฃเดพเดฏเด•เดฎเดพเดฏ เด…เดชเด•เดŸเดฎเดพเดฃเต, เด•เดพเดฐเดฃเด‚... เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเดฟเตฝ เดธเต†เดทเตป เด•เตเด•เตเด•เดฟเด•เดณเตเด‚ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เด•เตเดฑเดšเตเดšเต เดฎเดฃเดฟเด•เตเด•เต‚เดฑเตเด•เตพเด•เตเด•เต เดถเต‡เดทเด‚, เดธเต€เดฑเต‹ เดฌเตˆเดฑเตเดฑเต เดซเดฟเตฝเดŸเตเดŸเตผ เดšเต†เดฏเตเดฏเตเดจเตเดจ เด’เดฐเต เดคเดพเตฝเด•เตเด•เดพเดฒเดฟเด• เดชเดฐเดฟเดนเดพเดฐเด‚ เด‰เดฃเตเดŸเดพเด•เตเด•เดฟ (เดชเดฟเดจเตเดจเต€เดŸเต เด‡เดคเต เดชเดฐเตเดฏเดพเดชเตเดคเดฎเดฒเตเดฒ, เด•เดพเดฐเดฃเด‚ CRLF / ASCII 13, 10 เด•เตเดคเตเดคเดฟเดตเดฏเตเด•เตเด•เดพเดจเตเดณเตเดณ เดธเดพเดงเตเดฏเดคเดฏเตเดฃเตเดŸเต, เด‡เดคเต เดคเดฒเด•เตเด•เต†เดŸเตเดŸเตเด•เตพ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. HTTP เดชเตเดฐเดคเดฟเด•เดฐเดฃเดคเตเดคเดฟเดจเตเดฑเต† เดกเดพเดฑเตเดฑ, เด‡เดคเต เดจเดฟเตผเดฃเดพเดฏเด•เดฎเดฒเตเดฒ, เดชเด•เตเดทเต‡ เด‡เดชเตเดชเต‹เดดเตเด‚ เด…เดธเตเด–เด•เดฐเดฎเดพเดฃเต). เด…เดคเต‡เดธเดฎเดฏเด‚, เดฌเด—เดฟเดจเตเดฑเต† เด•เดพเดฐเดฃเด™เตเด™เตพ เด•เดฃเตเดŸเต†เดคเตเดคเตเดจเตเดจเดคเดฟเดจเตเด‚ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดชเตเดฐเดถเตเดจเด‚ เดธเตเดฐเด•เตเดทเดพ เดตเดฟเดถเด•เดฒเดจ เดตเดฟเดฆเด—เตเดงเตผเด•เตเด•เตเด‚ เดกเดตเดฒเดชเตเดชเตผเดฎเดพเตผเด•เตเด•เตเด‚ เด•เตˆเดฎเดพเดฑเดฟ.

Mail.ru เดฎเต†เดฏเดฟเตฝ เดตเดณเดฐเต† เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเดฏ เด’เดฐเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดพเดฃเต; เด“เดชเตเดชเตบ เดธเต‹เดดเตโ€Œเดธเตเด‚ (เดŽเดฒเตเดฒเดพ เดธเตเดตเดคเดจเตเดคเตเดฐ เดธเต‹เดซเตเดฑเตเดฑเตโ€Œเดตเต†เดฏเตผ เดกเต†เดตเดฒเดชเตเดชเตผเดฎเดพเตผเด•เตเด•เตเด‚ เดจเดจเตเดฆเดฟ) เด‡เตป-เดนเตŒเดธเต เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเดšเตเดšเดคเตเดฎเดพเดฏ เดจเดฟเดฐเดตเดงเดฟ เดซเตเดฐเดฃเตเดŸเต-เดŽเตปเดกเต/เดฌเดพเด•เตเด•เต-เดŽเตปเดกเต เด˜เดŸเด•เด™เตเด™เตพ, เดชเตเดฐเดคเดฟเด•เดฐเดฃเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเตฝ เดชเด™เตเด•เดพเดณเดฟเด•เดณเดพเด•เดพเด‚. เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต nginx, openresty เดŽเดจเตเดจเดฟเดต เด’เดดเดฟเด•เต†เดฏเตเดณเตเดณ เดŽเดฒเตเดฒเดพ เด˜เดŸเด•เด™เตเด™เดณเตเด‚ เด’เดดเดฟเดตเดพเด•เตเด•เดพเดจเตเด‚ เดชเตเดฐเดถเตเดจเด‚ เดชเตเดฐเดพเดฆเต‡เดถเดฟเด•เดตเตฝเด•เตเด•เดฐเดฟเด•เตเด•เดพเดจเตเด‚ เดžเด™เตเด™เตพเด•เตเด•เต เด•เดดเดฟเดžเตเดžเต ngx.req.set_uri() เดชเตเดฐเดคเต€เด•เตเดทเดฟเดšเตเดš เดชเต‹เดฒเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเดคเตเดค เด’เดฐเต OpenResty เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเดฟเตฝ (ngx_http_rewrite_module-เตฝ เดฑเต€เดฑเตˆเดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเดจเตเดจ GET เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เดตเดดเดฟ เด’เดฐเต เดจเตพ เดฌเตˆเดฑเตเดฑเต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฒเตˆเตป เดซเต€เดกเต เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต, เด‡เดคเต เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเตป เด…เดจเตเดธเดฐเดฟเดšเตเดšเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเต เด…เดคเต‡ เดฐเต€เดคเดฟเดฏเดฟเตฝ เดคเดจเตเดจเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดฎเต†เดจเตเดจเต เดคเต‹เดจเตเดจเตเดจเตเดจเต. เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ). เดธเดพเดงเตเดฏเดฎเดพเดฏ เดชเตเดฐเดคเตเดฏเดพเด˜เดพเดคเด™เตเด™เตพ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดฟ, เดซเดฟเตฝเดŸเตเดŸเดฑเดฟเด‚เด—เต เด•เดดเดฟเดฏเตเดจเตเดจเดคเตเดฐ เด•เตผเดถเดจเดฎเดพเดฏเดฟ เดšเต‡เตผเดคเตเดคเต, เดธเดพเดงเตเดฏเดฎเดพเดฏ เดŽเดฒเตเดฒเดพ เดตเต†เด•เตเดฑเตเดฑเดฑเตเด•เดณเตเด‚ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดพเตป เดซเดฟเตฝเดŸเตเดŸเดฑเดฟเด‚เด—เต เดชเดฐเดฟเดถเต‹เดงเดฟเดšเตเดšเต. เดŽเดจเตเดจเดพเตฝ เดฎเต†เดฎเตเดฎเดฑเดฟ เด‰เดณเตเดณเดŸเด•เตเด•เด™เตเด™เดณเตเดŸเต† เดšเต‹เตผเดšเตเดšเดฏเดฟเดฒเต‡เด•เตเด•เต เดจเดฏเดฟเดšเตเดš เดธเด‚เดตเดฟเดงเดพเดจเด‚ เด’เดฐเต เดฐเดนเดธเตเดฏเดฎเดพเดฏเดฟ เดคเตเดŸเตผเดจเตเดจเต. เด’เดฐเต เดฎเดพเดธเดคเตเดคเดฟเดจเตเดถเต‡เดทเด‚, เดฌเด—เต เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเต เดชเดฐเดฟเดนเดฐเดฟเดšเตเดšเต, เดฌเด—เดฟเดจเตเดฑเต† เด•เดพเดฐเดฃเด™เตเด™เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดตเดฟเดถเด•เดฒเดจเด‚ เดฎเดฟเด•เดšเตเดš เดธเดฎเดฏเดคเตเดคเต‡เด•เตเด•เต เดฎเดพเดฑเตเดฑเดฟเดตเดšเตเดšเต.

nginx-เดจเตเดณเตเดณเดฟเตฝ Lua เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตเด•เตพ เดŽเดดเตเดคเดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจ เดตเดณเดฐเต† เดœเดจเดชเตเดฐเดฟเดฏเดฎเดพเดฏ เด’เดฐเต เดชเตเดฒเด—เดฟเตป เด†เดฃเต OpenResty, เด•เต‚เดŸเดพเดคเต† เด‡เดคเต เดจเดฟเดฐเดตเดงเดฟ Mail.ru เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด•เดณเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเดฟเดจเดพเตฝ เดชเตเดฐเดถเตเดจเด‚ เดชเดฐเดฟเดนเดฐเดฟเดšเตเดšเดคเดพเดฏเดฟ เด•เดฃเด•เตเด•เดพเด•เตเด•เดชเตเดชเต†เดŸเตเดŸเดฟเดฒเตเดฒ. เด•เตเดฑเดšเตเดšเต เดธเดฎเดฏเดคเตเดคเดฟเดจเต เดถเต‡เดทเด‚, เดฏเดฅเดพเตผเดคเตเดฅ เด•เดพเดฐเดฃเด™เตเด™เดณเตเด‚ เดธเดพเดงเตเดฏเดฎเดพเดฏ เด…เดจเดจเตเดคเดฐเดซเดฒเด™เตเด™เดณเตเด‚ เดฎเดจเดธเดฟเดฒเดพเด•เตเด•เดพเดจเตเด‚ เดกเดตเดฒเดชเตเดชเตผเดฎเดพเตผเด•เตเด•เดพเดฏเดฟ เดถเตเดชเดพเตผเดถเด•เตพ เดจเตฝเด•เดพเดจเตเด‚ เด…เดตเตผ เด’เดŸเตเดตเดฟเตฝ เด…เดคเดฟเดฒเต‡เด•เตเด•เต เดฎเดŸเด™เตเด™เดฟ. เดธเต‹เดดเตเดธเต เด•เต‹เดกเดฟเดจเตเดฑเต† เด‰เดคเตเด–เดจเดจเดคเตเดคเดฟเตฝ เดชเด™เตเด•เต†เดŸเตเดคเตเดคเต เดกเต†เดจเดฟเดธเต เดกเต†เดจเดฟเดธเต‹เดตเต ะธ เดจเดฟเด•เตเด•เต‹เดณเดพเดฏเต เดŽเตผเดฎเดฟเดทเตเด•เดฟเตป. เด…เดคเต เดฎเดพเดฑเดฟ:

  • nginx-เตฝ, เด‰เดชเดฏเต‹เด•เตเดคเตƒ เดกเดพเดฑเตเดฑ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดฑเต€เดฑเตˆเดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเดฎเตเดชเต‹เตพ, เดšเดฟเดฒ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเด•เดณเดฟเตฝ เดกเดฏเดฑเด•เตโ€ŒเดŸเดฑเดฟ เดŸเตเดฐเดพเดตเต†เตผเดธเดฒเดฟเดจเตเดณเตเดณ (เด’เดฐเตเดชเด•เตเดทเต‡ SSRF) เดธเดพเดงเตเดฏเดคเดฏเตเดฃเตเดŸเต, เดŽเดจเตเดจเดพเตฝ เด‡เดคเต เด…เดฑเดฟเดฏเดชเตเดชเต†เดŸเตเดจเตเดจ เด’เดฐเต เดตเดธเตเดคเตเดคเดฏเดพเดฃเต, เด‡เดคเต เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด…เดจเดฒเตˆเดธเดฑเตเด•เตพ เดตเดดเดฟ เด•เดฃเตเดŸเต†เดคเตเดคเต‡เดฃเตเดŸเดคเดพเดฃเต. Nginx เด†เด‚เดชเตเดฒเดฟเดซเตˆ ะธ เดœเดฟเด•เตเดธเดฟ Yandex-เตฝ เดจเดฟเดจเตเดจเต (เด…เดคเต†, เดžเด™เตเด™เตพ เด…เดคเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต, เดจเดจเตเดฆเดฟ). OpenResty เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดˆ เดธเดตเดฟเดถเต‡เดทเดค เดจเดทเตโ€ŒเดŸเดฎเดพเด•เตเดจเตเดจเดคเต เดŽเดณเตเดชเตเดชเดฎเดพเดฃเต, เดชเด•เตเดทเต‡ เด‡เดคเต เดžเด™เตเด™เดณเตเดŸเต† เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเต† เดฌเดพเดงเดฟเดšเตเดšเดฟเดฒเตเดฒ.

    เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด‰เดฆเดพเดนเดฐเดฃเด‚:

    location ~ /rewrite {
        rewrite ^.*$ $arg_x;
    }
    
    location / {
        root html;
        index index.html index.htm;
    }

    เด‡เดซเด•เตเดŸเต

    curl localhost:8337/rewrite?x=/../../../../../../../etc/passwd
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    ...

  • Nginx-เดจเต เด’เดฐเต เดฌเด—เต เด‰เดฃเตเดŸเต, เด…เดคเต เดฑเต€เดฑเตˆเดฑเตเดฑเดฟเด‚เด—เต เดฒเตˆเดจเดฟเตฝ เด’เดฐเต เดจเตพ เดฌเตˆเดฑเตเดฑเต เด…เดŸเด™เตเด™เดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ เดฎเต†เดฎเตเดฎเดฑเดฟ เดฒเต€เด•เตเด•เต เดšเต†เดฏเตเดฏเตเด‚. เด’เดฐเต เดฑเต€เดกเดฏเดฑเด•เตโ€ŒเดŸเต เด‡เดทเตเดฏเต‚ เดšเต†เดฏเตเดฏเตเดฎเตเดชเต‹เตพ, เดฒเตˆเดจเดฟเดจเตเดฑเต† เดฎเตเดดเตเดตเตป เดจเต€เดณเดตเตเดฎเดพเดฏเดฟ เดชเตŠเดฐเตเดคเตเดคเดชเตเดชเต†เดŸเตเดจเตเดจ เด’เดฐเต เดชเตเดคเดฟเดฏ เดฎเต†เดฎเตเดฎเดฑเดฟ เดฌเดซเตผ nginx เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเด‚, เดŽเดจเตเดจเดพเตฝ เดธเต€เดฑเต‹ เดฌเตˆเดฑเตเดฑเต เด’เดฐเต เดฒเตˆเตป เดŸเต†เตผเดฎเดฟเดจเต‡เดฑเตเดฑเดฑเดพเดฏ เด’เดฐเต เดฒเตˆเตป เดซเด‚เด—เตโ€Œเดทเดจเดฟเดฒเต‚เดŸเต† เดฒเตˆเตป เด…เดตเดฟเดŸเต† เดชเด•เตผเดคเตเดคเตเดจเตเดจเต, เด…เดคเดฟเดจเดพเตฝ เดฒเตˆเตป เดชเต‚เดœเตเดฏเด‚ เดตเดฐเต† เดฎเดพเดคเตเดฐเดฎเต‡ เดชเด•เตผเดคเตเดคเต‚. เดฌเตˆเดฑเตเดฑเต; เดฌเดพเด•เตเด•เดฟเดฏเตเดณเตเดณ เดฌเดซเดฑเดฟเตฝ เด†เดฐเด‚เดญเดฟเด•เตเด•เดพเดคเตเดค เดกเดพเดฑเตเดฑ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เดตเดฟเดถเดฆเดฎเดพเดฏ เดตเดฟเดถเด•เดฒเดจเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเดพเด‚ เด‡เดตเดฟเดŸเต†.

    เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด‰เดฆเดพเดนเดฐเดฃเด‚ (^@ เดธเต€เดฑเต‹ เดฌเตˆเดฑเตเดฑเต)

    
    location ~ /memleak {
        rewrite ^.*$ "^@asdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdasdf";
    }
    
    location / {
        root html;
        index index.html index.htm;
    }

    เด‡เดซเด•เตเดŸเต
    curl localhost:8337/secret -vv
    ...
    curl localhost:8337/memleak -vv
    ...
    Location: http://localhost:8337/secret
    ...

  • เดธเต‡เดตเดจ เดชเตเดฐเดคเต€เด•เด™เตเด™เตพ เด•เตเดคเตเดคเดฟเดตเดฏเตเด•เตเด•เตเดจเตเดจเดคเดฟเตฝ เดจเดฟเดจเตเดจเต GET เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เดณเต† Nginx เดชเดฐเดฟเดฐเด•เตเดทเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดฑเต€เดฑเตˆเดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเดฎเตเดชเต‹เตพ GET เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เดฎเดพเดคเตเดฐเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเต เดธเดพเดงเตเดฏเดฎเดพเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เด…เดคเดฟเดจเดพเตฝ, nginx-เดฒเต† เด‰เดชเดฏเต‹เด•เตเดคเตƒ เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเดค เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เดตเดดเดฟ เด•เตเดคเตเดคเดฟเดตเดฏเตเดชเตเดชเต เดšเต‚เดทเดฃเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดธเดพเดงเตเดฏเดฎเดฒเตเดฒ. POST เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เดชเดฐเดฟเดฐเด•เตเดทเดฟเดšเตเดšเดฟเดŸเตเดŸเดฟเดฒเตเดฒ. GET, POST เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพเด•เตเด•เตŠเดชเตเดชเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป OpenResty เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเดฟเดจเดพเตฝ OpenResty เดตเดดเดฟ POST เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดชเตเดฐเดคเตเดฏเต‡เด• เดชเตเดฐเดคเต€เด•เด™เตเด™เตพ เด•เตเดคเตเดคเดฟเดตเดฏเตเด•เตเด•เตเดจเตเดจเดคเต เดธเดพเดงเตเดฏเดฎเดพเด•เตเด‚.

    เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด‰เดฆเดพเดนเดฐเดฃเด‚:

    location ~ /memleak {
        rewrite_by_lua_block {
            ngx.req.read_body();
            local args, err = ngx.req.get_post_args();
            ngx.req.set_uri( args["url"], true );
        }
    }
    
    location / {
        root html;
        index index.html index.htm;
    }
    

    เดซเดฒเดฎเดพเดฏเดฟ:

    curl localhost:8337 -d "url=secret" -vv
    ...
    curl localhost:8337 -d "url=%00asdfasdfasdfasdfasdfasdfasdfasdf" -vv
    ...
    Location: http://localhost:8337/{...ะผะพะถะตั‚ ัะพะดะตั€ะถะฐั‚ัŒ secret...}
    ...

เด•เต‚เดŸเตเดคเตฝ เดชเตเดฐเดคเดฟเด•เดฐเดฃเด‚

เดชเตเดฐเดถเตเดจเด‚ nginx, OpenResty เดŽเดจเตเดจเดฟเดตเดฏเตเดŸเต† เดกเดตเดฒเดชเตเดชเตผเดฎเดพเดฐเต‹เดŸเต เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเต เดšเต†เดฏเตเดคเต, เดกเดตเดฒเดชเตเดชเตผเดฎเดพเตผ เดˆ เดชเตเดฐเดถเตเดจเด‚ nginx-เดฒเต† เด’เดฐเต เดธเตเดฐเด•เตเดทเดพ เดฌเด—เต เด†เดฏเดฟ เด•เดฃเด•เตเด•เดพเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ, เด•เดพเดฐเดฃเด‚ nginx-เตฝ เดคเดจเตเดจเต† เดชเตเดฐเดคเตเดฏเต‡เด• เดชเตเดฐเดคเต€เด•เด™เตเด™เตพ เด•เตเดคเตเดคเดฟเดตเดฏเตเด•เตเด•เตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต† เดชเดฟเดถเด•เต เดšเต‚เดทเดฃเด‚ เดšเต†เดฏเตเดฏเดพเตป เด’เดฐเต เดฎเดพเตผเด—เดตเตเดฎเดฟเดฒเตเดฒ, เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เตเด• เดฎเต†เดฎเตเดฎเดฑเดฟ เดตเต†เดณเดฟเดชเตเดชเต†เดŸเตเดคเตเดคเตฝ เดกเดฟเดธเด‚เดฌเตผ 16-เดจเต เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฟเดšเตเดšเต. ngx.req.set_uri() เดซเด‚เด—เตโ€Œเดทเดจเตเดฑเต† เด’เดฐเต เดธเตเดฐเด•เตเดทเดฟเดค เดชเดคเดฟเดชเตเดชเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต†เดจเตเดจเต เดงเดพเดฐเดฃเดฏเตเดฃเตเดŸเต†เด™เตเด•เดฟเดฒเตเด‚, เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเดฟเดจเต เดถเต‡เดทเดฎเตเดณเตเดณ 4 เดฎเดพเดธเด™เตเด™เดณเดฟเตฝ, OpenResty-เดฏเดฟเตฝ เดฎเดพเดฑเตเดฑเด™เตเด™เดณเตŠเดจเตเดจเตเด‚ เดตเดฐเตเดคเตเดคเดฟเดฏเดฟเดŸเตเดŸเดฟเดฒเตเดฒ. 18 เดฎเดพเตผเดšเตเดšเต 2020-เดจเต เดžเด™เตเด™เตพ เดตเดฟเดตเดฐเด™เตเด™เตพ เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฟเดšเตเดšเต, เดฎเดพเตผเดšเตเดšเต 21-เดจเต OpenResty เดชเตเดฑเดคเตเดคเดฟเดฑเด•เตเด•เดฟ เดชเดคเดฟเดชเตเดชเต 1.15.8.3, เด‡เดคเต URI เดฎเต‚เดฒเตเดฏเดจเดฟเตผเดฃเตเดฃเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต.

เดชเต‹เตผเดŸเตเดŸเตเดธเตเดตเดฟเด—เตผ เดŽเดดเตเดคเดฟ เดจเดฒเตเดฒ เดฒเต‡เด–เดจเด‚ เด•เต‚เดŸเดพเดคเต† OpenResty, Nginx เดŽเดจเตเดจเดฟเดตเดฏเดฟเตฝ เดจเดฟเดจเตเดจเตเด‚ เด…เดญเดฟเดชเตเดฐเดพเดฏเด™เตเด™เตพ เดŽเดŸเตเดคเตเดคเต (เดฎเต†เดฎเตเดฎเดฑเดฟเดฏเตเดŸเต† เด’เดฐเต เดšเต†เดฑเดฟเดฏ เดถเด•เดฒเด‚ เดฎเดพเดคเตเดฐเดฎเต‡ เดคเตเดฑเดจเตเดจเตเด•เดพเดŸเตเดŸเดชเตเดชเต†เดŸเตเดจเตเดจเตเดณเตเดณเต‚ เดŽเดจเตเดจ เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดคเต†เดฑเตเดฑเตเด‚ เดคเต†เดฑเตเดฑเดฟเดฆเตเดงเดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเตเดฎเดพเดฃเต, เด‡เดคเต เดจเดฟเตผเดฃเตเดฃเดฏเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต เดจเตพ เดฌเตˆเดฑเตเดฑเดฟเดจเต เดถเต‡เดทเดฎเตเดณเตเดณ เดตเดฐเดฟเดฏเตเดŸเต† เดฆเตˆเตผเด˜เตเดฏเดตเตเด‚, เดตเตเดฏเด•เตเดคเดฎเดพเดฏ เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเด™เตเด™เดณเตเดŸเต† เด…เดญเดพเดตเดคเตเดคเดฟเตฝ เดจเต€เดณเด‚, เด†เด•เตเดฐเดฎเดฃเด•เดพเดฐเดฟเด•เตเด•เต เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเด•เตเด•เดพเดจเดพเด•เตเด‚).

เด…เดชเตเดชเต‹เตพ เดŽเดจเตเดคเดพเดฃเต เดคเต†เดฑเตเดฑเต, เด…เดคเต เดคเดŸเดฏเดพเตป เดŽเดจเตเดคเดพเดฃเต เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเต?

nginx-เตฝ เด’เดฐเต เดฌเด—เต เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเตเดจเตเดจเต‹? เด…เดคเต†, เด•เดพเดฐเดฃเด‚, เดฎเต†เดฎเตเดฎเดฑเดฟ เด‰เดณเตเดณเดŸเด•เตเด•เด™เตเด™เตพ เดšเต‹เตผเดคเตเดคเตเดจเตเดจเดคเต เดเดคเต เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเดฒเตเด‚ เด’เดฐเต เดชเดฟเดถเด•เดพเดฃเต.

เด“เดชเตเดชเตบ เดฑเต†เดธเตเดฑเตเดฑเดฟเดฏเดฟเตฝ เด’เดฐเต เดฌเด—เต เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเตเดจเตเดจเต‹? เด…เดคเต†, OpenResty เดตเดพเด—เตเดฆเดพเดจเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจ เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเดจเตเดฑเต† เดธเตเดฐเด•เตเดทเดฏเตเดŸเต† เดชเตเดฐเดถเตเดจเดฎเต†เด™เตเด•เดฟเดฒเตเด‚ เด…เดจเตเดตเต‡เดทเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดฐเต‡เด–เดชเตเดชเต†เดŸเตเดคเตเดคเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเดฟเดŸเตเดŸเดฟเดฒเตเดฒ.

เด“เดชเตเดชเตบ เดฑเต†เดธเตเดฑเตเดฑเดฟเดฏเดฟเตฝ เด’เดฐเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป/เด‰เดชเดฏเต‹เด— เดชเดฟเดถเด•เต เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเตเดจเตเดจเต‹? เด…เดคเต†, เด•เดพเดฐเดฃเด‚ เดตเตเดฏเด•เตเดคเดฎเดพเดฏ เด’เดฐเต เดชเตเดฐเดธเตเดคเดพเดตเดจเดฏเตเดŸเต† เด…เดญเดพเดตเดคเตเดคเดฟเตฝ, เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเดจเตเดฑเต† เดธเตเดฐเด•เตเดทเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดธเตเดฅเดฟเดฐเต€เด•เดฐเดฟเด•เตเด•เดพเดคเตเดค เด’เดฐเต เด…เดจเตเดฎเดพเดจเด‚ เด‰เดฃเตเดŸเดพเดฏเดฟ.

$10000 เดฌเต—เดฃเตเดŸเดฟเดฏเตเดณเตเดณ เดธเตเดฐเด•เตเดทเดพ เด…เดชเด•เดŸเดธเดพเดงเตเดฏเดคเดฏเตเดณเตเดณ เดˆ เดฌเด—เตเด•เดณเดฟเตฝ เดเดคเดพเดฃเต? เดžเด™เตเด™เดณเต† เดธเด‚เดฌเดจเตเดงเดฟเดšเตเดšเดฟเดŸเดคเตเดคเต‹เดณเด‚ เด‡เดคเต เดชเตŠเดคเตเดตเต† เดชเตเดฐเดงเดพเดจเดฎเดฒเตเดฒ. เดเดคเตŠเดฐเต เดธเต‹เดซเตโ€Œเดฑเตเดฑเตโ€Œเดตเต†เดฏเดฑเดฟเดฒเตเด‚, เดชเตเดฐเดคเตเดฏเต‡เด•เดฟเดšเตเดšเต เดตเดฟเดตเดฟเดง เดชเตเดฐเต‹เดœเด•เตโ€ŒเดŸเตเด•เดณเตเด‚ เดกเดตเดฒเดชเตเดชเตผเดฎเดพเดฐเตเด‚ เดจเตฝเด•เตเดจเตเดจ เดจเดฟเดฐเดตเดงเดฟ เด˜เดŸเด•เด™เตเด™เดณเตเดŸเต† เด•เดตเดฒเดฏเดฟเตฝ, เด…เดตเดฐเตเดŸเต† เดœเต‹เดฒเดฟเดฏเตเดŸเต† เดŽเดฒเตเดฒเดพ เดธเดตเดฟเดถเต‡เดทเดคเด•เดณเตเด‚ เด…เดฑเดฟเดฏเตเด•เดฏเตเด‚ เดฐเต‡เด–เดชเตเดชเต†เดŸเตเดคเตเดคเตเด•เดฏเตเด‚ เดšเต†เดฏเตโ€ŒเดคเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เดจเตเดจเตเด‚ เดชเดฟเดถเด•เตเด•เดณเตŠเดจเตเดจเตเดฎเดฟเดฒเตเดฒเต†เดจเตเดจเตเด‚ เด†เตผเด•เตเด•เตเด‚ เด‰เดฑเดชเตเดชเตเดจเตฝเด•เดพเตป เด•เดดเดฟเดฏเดฟเดฒเตเดฒ. เด…เดคเดฟเดจเดพเตฝ, เดธเตเดฐเด•เตเดทเดฏเต† เดฌเดพเดงเดฟเด•เตเด•เตเดจเตเดจเดฟเดŸเดคเตเดคเต เดเดคเต เดธเตเดฐเด•เตเดทเดพ เดคเด•เดฐเดพเดฑเตเด‚ เดธเด‚เดญเดตเดฟเด•เตเด•เตเดจเตเดจเต.

เดเดคเต เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเดฒเตเด‚, เดตเตเดฏเด•เตเดคเดฎเดพเดฏ เดจเดฟเตผเดฆเตเดฆเต‡เดถเด™เตเด™เดณเตเด‚ เด‡เดคเต เด†เดตเดถเตเดฏเดฎเดฟเดฒเตเดฒเต†เดจเตเดจ เดตเตเดฏเด•เตเดคเดฎเดพเดฏ เดงเดพเดฐเดฃเดฏเตเด‚ เด‡เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดฌเดพเดนเตเดฏ เดฎเตŠเดกเตเดฏเต‚เดณเดฟเดฒเต‡เด•เตเด•เต/เดŽเดชเดฟเดเดฏเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เตเดจเตเดจ เด‡เตปเดชเตเดŸเตเดŸเต เดกเดพเดฑเตเดฑ เด•เดดเดฟเดฏเตเดจเตเดจเดคเตเดฐ เดจเต‹เตผเดฎเดฒเตˆเดธเต เดšเต†เดฏเตเดฏเตเด•เดฏเต‹ เดชเดฐเดฟเดฎเดฟเดคเดชเตเดชเต†เดŸเตเดคเตเดคเตเด•เดฏเต‹ / เดซเดฟเตฝเดŸเตเดŸเตผ เดšเต†เดฏเตเดฏเตเด•เดฏเต‹ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดพเดฃเต เดจเดฒเตเดฒเดคเต.

เดŽเดฑเดพเดฑเตเดฑ

เด…เดจเตเดญเดตเดคเตเดคเดฟเดฒเต‚เดŸเต† เดฎเตเตป เดฒเต‡เด–เดจเด‚, เดญเดพเดทเดฏเตเดŸเต† เดชเดฐเดฟเดถเตเดฆเตเดงเดฟ เด•เดพเดคเตเดคเตเดธเต‚เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ:

เดฌเด—เต เด”เดฆเดพเดฐเตเดฏเด‚ - เดฌเด—เต เดตเต‡เดŸเตเดŸ เดฎเดคเตเดธเดฐเด‚
เดฌเด—เต เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเต - เดชเดฟเดถเด•เต เด…เดฑเดฟเดฏเดฟเดชเตเดชเต
เดคเดฟเดฐเดฟเดšเตเดšเตเดตเดฟเดŸเตเด• - เดคเดฟเดฐเดฟเดšเตเดšเตเดตเดฟเดŸเตฝ
เดคเตเดฑเดจเตเดจ เด‰เดฑเดตเดฟเดŸเด‚ - เด“เดชเตเดชเตบ เดธเต‹เดดเตเดธเต
เดชเดฟเดถเด•เต - เดคเต†เดฑเตเดฑเตเด•เดณเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเด•

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•