หลายครั้งที่ต้องทำ server จำพวก PHP แน่นอนว่า PHP มันใช้งานง่าย เขียนง่าย แต่สิ่งที่ง่ายพวกนี้มักจะทำให้เราเพลิดเพลินจนละเลยในด้านความปลอดภัยไป จะดีแค่ไหนถ้าหากเราป้องกันก่อนที่จะโดนเจาะระบบ ไปเจอเครื่องมือตัวนึงเข้าซึ่งมีชื่อว่า iniscanมันจะทำหน้าที่ตรวจสอบการตั้งค่าของไฟล์ php.ini ในเครื่องเราว่า ควรจะแก้ไขตรงไหน ควรตั้งค่าอย่างไร วิธีใช้นั้นก็แสนง่ายครับ
เริ่มแรกติดตั้ง composer ในเครื่องเราเสียก่อน (หากมีแล้วก็ข้ามขั้นตอนนี้ไปครับ)
[shell]
curl -sS https://getcomposer.org/installer | php
[/shell]
หลังจากนั้นทำการติดตั้ง iniscan ผ่านทาง composer ครับ
[shell]composer require psecio/iniscan[/shell]
เสร็จแล้วเรียกใช้งาน iniscan พร้อมกับที่เก็บไฟล์ php.ini ของเราครับ
[shell]
vendor/bin/iniscan scan –path=/etc/php5/fpm/php.ini
[/shell]
จะได้ผลลัพท์ดังต่อไปนี้
== Executing INI Scan [07.21.2015 13:42:15] == Results for /etc/php5/fpm/php.ini: ============ Status | Severity | PHP Version | Key | Description ---------------------------------------------------------------------- PASS | ERROR | | session.use_cookies | Accepts cookies to manage sessions PASS | ERROR | 4.3.0 | session.use_only_cookies | Must use cookies to manage sessions, don't accept session-ids in a link FAIL | WARNING | | session.cookie_domain | It is recommended that you set the default domain for cookies. FAIL | ERROR | 5.2.0 | session.cookie_httponly | Setting session cookies to 'http only' makes them only readable by the browser PASS | ERROR | 4.3.0 | session.bug_compat_42 | An undocumented feature/bug that allows initialize of a session in the global scope even if register_globals is disabled for PHP up to 5.3.22 PASS | WARNING | 4.3.0 | session.bug_compat_warn | Disable warnings for session.bug_compat_42 FAIL | WARNING | | session.hash_function | Weak hashing algorithms in use. Rather use one of these: adler32, crc32, crc32b, fnv132, fnv164, fnv1a32, fnv1a64, haval128,3, haval128,4, haval128,5, haval160,3, haval160,4, haval160,5, haval192,3, haval192,4, haval192,5, haval224,3, haval224,4, haval224,5, haval256,3, haval256,4, haval256,5, ripemd128, ripemd160, ripemd256, ripemd320, sha224, sha256, sha384, sha512, tiger128,3, tiger128,4, tiger160,3, tiger160,4, tiger192,3, tiger192,4, whirlpool PASS | WARNING | | session.save_path | Session save path should be set and writeable by only the web user PASS | ERROR | 4.0.3 | session.use_trans_sid | If used 'use_trans_sid' setting puts the session ID on the URL, making it easier to hijack FAIL | ERROR | 4.0.4 | session.cookie_secure | Cookie secure specifies whether cookies should only be sent over secure connections. PASS | WARNING | | session.entropy_file | A file should be provided to help provide session entropy FAIL | WARNING | 5.5.2 | session.use_strict_mode | Strict mode prevents uninitialized session IDs in the built-in session handling. FAIL | ERROR | 4.0.3 | allow_url_fopen | Do not allow the opening of remote file resources ('Off' recommended) PASS | ERROR | 5.2.0 | allow_url_include | Do not allow the inclusion of remote file resources ('Off' recommended) FAIL | WARNING | | display_errors | Don't show errors in production ('Off' recommended) PASS | WARNING | | log_errors | Log errors in production ('On' recommended) PASS | WARNING | | expose_php | Showing the PHP signature exposes additional information PASS | ERROR | | register_globals | The register globals setting is dangerous and has been deprecated ('Off' recommended) PASS | ERROR | | magic_quotes_gpc | Magic quotes automatically adds quotes to incoming data ('Off' recommended) PASS | ERROR | | magic_quotes_runtime | Magic quotes should be disabled at runtime in addition to being off for incoming data PASS | WARNING | | post_max_size | A too large value for the maximum post size could allow for DoS against your application PASS | ERROR | | safe_mode | It's not actually 'safe' ('Off' recommended) PASS | WARNING | | register_long_arrays | Registering long arrays turns on the HTTP_*_VARS (Recommended Off) FAIL | WARNING | | max_input_vars | A maximum number of input variables should be defined to prevent performance issues PASS | WARNING | | display_startup_errors | Showing startup errors could provide extra information to potential attackers FAIL | WARNING | | open_basedir | Restricting PHP's access to the file system to a certain directory prevents file-based attacks in unauthorized areas. PASS | WARNING | | error_reporting | Error reporting should be different based on context, off in production PASS | WARNING | | upload_max_filesize | A maximum upload size should be defined to prevent server overload from large requests PASS | WARNING | | upload_max_filesize | The max upload size should not be too high, to prevent server overload from large requests PASS | WARNING | | post_max_size | A maximum post size should be defined to prevent server overload from large requests PASS | WARNING | | post_max_size | The max upload size should not be too high, to prevent server overload from large requests PASS | WARNING | | memory_limit | A memory limit should be defined to prevent server overload from large processes FAIL | WARNING | | memory_limit | The standard memory limit should not be too high, if you need more memory for a single script you can adjust that during runtime using ini_set() PASS | WARNING | | asp_tags | Old versions of PHP allowed for ASP-style tags (<% %>) instead of <?php. This should be disabled. PASS | WARNING | | xdebug.default_enable | Xdebug should be disabled in production PASS | WARNING | | xdebug.remote_enable | Xdebug should not be trying to contact debug clients FAIL | WARNING | | disable_functions | Methods still enabled - exec, passthru, shell_exec, system, proc_open, popen, curl_exec, curl_multi_exec PASS | WARNING | | soap.wsdl_cache_dir | Checks to see if the SOAP WSDL cache directory is inside open_basedir for PHP before 5.3.22 and 5.4.x before 5.4.13 PASS | WARNING | | upload_tmp_dir | Checks to see if the upload_tmp_dir is inside the open_basedir folder 28 passing 3 failure(s) and 8 warnings
หลังจากนั้นก็ทำการแก้ไขไฟล์ php.ini ตามที่มันแนะนำครับ 🙂
อ่านเพิ่มเติม https://github.com/psecio/iniscan