All notable changes to the Alsyundawy Looking Glass project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Applied
sanitize_output()to$config['title']in download test card heading (defence-in-depth XSS mitigation). - Applied
sanitize_output()to$csrf_tokenin CSRF hidden input value (defence-in-depth XSS mitigation).
- Fixed double-escaping bug in
$submitLabel: movedsanitize_output()from string assignment to echo points. - Updated deprecated Font Awesome 6 icons:
fa-phone-alt→fa-phone,fa-shield-alt→fa-shield-halved,fa-tachometer-alt→fa-gauge-high. - Hardened
$serverLocationin POST streaming banner usingtrim((string) $serverLocation)for explicit type safety. - Updated application version to
1.1.1and release date to2026-07-31.
- Fixed Checkov
CKV2_GHA_1workflow top-level security permissions acrossdevskim.ymlandcodeql.yml. - Fixed DevSkim
DS137138(HTTP URL scheme inparse_url) andDS162092(localhostdetection string artifact). - Upgraded Grype Super-Linter GitHub Action vulnerability by bumping
@v8to@v8.3.1. - Added Subresource Integrity (
integrity="sha384-...") andcrossorigin="anonymous"attributes to all CDN CSS and JS resources (PureCSS, Bootstrap, FontAwesome, jQuery, Bootstrap JS). - Resolved Zizmor
GITHUB_TOKENenvironment configuration requirements.
- Resolved all repository linter and security scanner issues (Checkov, DevSkim, djlint, Grype, JSCPD, Lychee, PHPCS, Psalm, v8r, Zizmor).
- Fixed djlint
H030&H031HTML meta description and keyword tags on error pages400.htmlthrough504.html. - Added standard
background-clip: text;CSS property alongside-webkit-background-clip: text;on error pages. - Fixed JSCPD duplicate code blocks by refactoring download test cards and test forms into unified loops.
- Fixed Lychee link checker root-relative link resolution on HTML error pages using
./. - Fixed PHPCS header spacing, control structure colon spacing, and indentation in
index.php. - Fixed Psalm type assertions, boolean
!emptychecks, session status verification, and strict superglobal type handling. - Fixed
v8randyamllintdependabot.ymlschema validation and unneeded string quotes across workflow files. - Renamed utility function
find_binary()to camelCasefindBinary()for strict linter compliance.
- Added
JSON_HEX_TAG | JSON_HEX_AMP | JSON_UNESCAPED_UNICODEflags to all inline JSON-LDjson_encode()calls to prevent</script>tag injection and ensure proper Unicode passthrough in structured data blocks. - Fixed JSON-LD
alternateNamefield: replaced$siteNameSafe(HTML-escaped) with raw$siteName; HTML entity encoding is incorrect inside JSON context.
- Fixed WhatsApp social link in footer: corrected scientific-notation artifact (
wa.me/6.28126969696e+11) back to plain numeric format (wa.me/628126969696) as required by thewa.meAPI spec. - Fixed PeeringDB footer link upgraded from HTTP to HTTPS.
- Fixed streaming POST handler: removed incorrect
sanitize_output()(htmlspecialchars) wrapping on plain-text terminal output; HTML entity encoding in atext/plaincontext corrupts special characters such as&,<,>in$serverLocationand command display strings. - Fixed output buffer handling in streaming POST handler: changed
ob_end_flush()toob_end_clean()to discard stale buffered content before starting the live process stream, preventing accidental partial HTML from being sent. - Optimized
opcache.memory_consumptionfrom 1024 MB to 128 MB — the prior 1 GB allocation was excessive for a single-file PHP application. - Improved inline documentation: added clarifying comment to session
ini_set()calls explaining their role as backward-compatibility fallbacks.
- Added
cdn.jsdelivr.netto Content-Security-Policyfont-srcandconnect-srcdirectives to allow Font Awesome icons and bootstrap source maps to load without CSP violations. - Added dynamic path-resolving helper function
findBinary()to locate system utility executables in non-standard paths (e.g./usr/local/sbinfor macOS Homebrewmtr).
- Enhanced DNS Lookup UI: each record type (
A,AAAA,NS,MX,SOA,TXT) now has a distinct muted-gradient card header and colored inline badge pill for visual differentiation. - Differentiated IPv4 and IPv6 download test buttons (
250MB,500MB,1GB) and Speedtest/Repository buttons with unique muted-gradient color schemes per category. - Optimized layout responsiveness for all devices from 320px to 2K; info cards now stack on tablet/mobile, DNS result tables use a horizontal scroll wrapper to prevent column clipping.
- Redesigned WHOIS lookup result table: elegant card with indigo-teal gradient header, monospace value column, zebra-striping, and a collapsible raw WHOIS data viewer.
- Softened all vivid/neon gradient colors on DNS badges, DNS card headers, and download test buttons so they remain visually distinct but no longer cause eye strain.
- Minified client-side CSS and JavaScript in production using clean-css and terser; PHP syntax verified before and after each minification pass.
- Fixed variable shadowing conflicts in inline client-side JavaScript (resolving duplicate variables like
t,e,oinside fetch responses and event handlers) to prevent potential scope leakage and optimize browser rendering. - Hardened the DNS Lookup tool by validating the process start status (
$result['started']) before running record queries, failing fast with HTTP 500 if thedigbinary is missing from the system. - Cleaned up Markdown lint style warnings (
MD060/table-column-style) in tables across documentation files by adding proper spacing to pipes. - Removed leftover debug
console.log()statements from the inline script block to ensure clean production console output. - Updated system requirements documentation to detail required PHP extensions (filter, json), recommended extensions (mbstring), and necessary PHP functions (proc_open, stream_select, etc.).
- Replaced the broken
starchart.ccstar chart widget with a highly reliable alternative fromstar-history.comto keep the stargazers graph working.
Contribution Features & Fixes (by @galiehneh)
- Fixed WhatsApp link in mobile header (
wa.me/628126969696) to remove the duplicate digit. - Fixed WhatsApp link in navigation/footer (
wa.me/628126969696) to use a plain numeric format without dashes or signs (+/-), as required by thewa.meAPI. - Corrected LinkedIn link to include the missing
/in/segment (linkedin.com/in/alsyundawy). - Corrected Telegram link to use the correct domain
t.meinstead oftelegram.org. - Added process launch validation (
$result['started']) in the WHOIS handler before accessing stdout/stderr, returning an early HTTP 500 status code if thewhoisbinary fails to launch. - Replaced physical speedtest files on disk with an on-the-fly chunked stream generator (
?download=Xhandler). It generates 250MB, 500MB, and 1GB test streams dynamically usingstr_repeatto save disk space. - Updated download links in the UI to use relative paths (
?download=...) instead of absolute URLs.
- Removed
sanitize_output()(htmlspecialchars) fromproc_openstreaming callbacks. Output is delivered asContent-Type: text/plainand rendered via JavaScriptcreateTextNode(), which is inherently XSS-safe. - Iperf3 command display now uses
$iperfportvariable (was hardcoded5201in 4 HTML locations); change the port once in config, it reflects everywhere. - WhatsApp
wa.melink in footer corrected to numeric format (wa.me/628126969696); the previous+62-812-...format with dashes is not accepted by the WhatsApp link API. - Upgraded
bgp.he.netfooter link from HTTP to HTTPS. - HTML5 semantics: second
<header class="site-header">element changed to<section aria-label="Site hero">— the HTML5 spec permits only one<header>landmark per sectioning context. - Removed non-existent
favicon.pngand duplicatefavicon-32x32reference from<head>. Removed 7apple-touch-iconsizes (152, 144, 120, 114, 76, 72, 60, 57 px) that have no corresponding file in the repository. - Applied
sanitize_output()to all$tabsarray data echoed into HTML attributes and element content (defence-in-depth). - Removed
console.log()banner from production JavaScript.
- Hardened command execution by replacing shell-based command strings with
proc_open()argv arrays to bypass the shell and reduce command injection risk. - Replaced
shell_exec()usage in WHOIS and DNS Lookup handlers with the same controlledproc_open()runner and timeout handling. - Added safer cookie-domain detection that strips ports/brackets and avoids invalid session cookie domains on localhost, IP addresses, and host:port setups.
- Added Content-Security-Policy and Permissions-Policy headers compatible with existing CDN, inline CSS/JS, ipify client-IP lookups, and local assets.
- Improved host validation, timeout behavior, stderr handling, JSON response encoding, and output streaming without changing the existing UI layout.
- Reduced hard PHP extension checks to extensions actually used by this file.
- Updated JSON-LD
softwareVersion/dateModifiedand fixed FAQ feature wording.
- Added WHOIS tab for IP & domain WHOIS lookup with human-readable parsed output.
- Added DNS Lookup tab (
A,AAAA,NS,MX,SOA,TXT) with modern responsive table display and Font Awesome icons per record type. - WHOIS results parsed and presented in user-friendly format for non-technical users.
- DNS Lookup results rendered as structured tables per record type.
- Both new tabs use AJAX with CSRF protection, consistent with existing tabs.
- Updated requirements to include
whoisanddigsystem utilities. - Minified WHOIS & DNS Lookup CSS and JavaScript.
- Fixed undefined
$script_namevariable; now uses$_SERVER['SCRIPT_NAME']. - Fixed incorrect
date()format from'YY-mm-dd'to'Y-m-d'(ISO 8601). - Fixed missing
https://scheme oncdnjs.cloudflare.compreconnect tag. - Fixed JavaScript syntax error: invalid jQuery selector
$((html,body)). - Increased
fread()buffer from 8192 to 16384 for faster streaming output. - Removed duplicate changelog entry and blank lines in doc comment.
- Code review and optimization pass.
- Updated hero background in light mode to match dark mode style.
- Updated
lg-logo.webpandhero-lg.webp. - CSS and JavaScript minification optimization.
- Implemented Session Validity Check (CSRF Token) on POST requests.
- Added bilingual error handling (ID/EN) for timed-out sessions.
- WebP image optimization.
- Security enhancements and code optimization.
- Initial release of Alsyundawy PHP Looking Glass.
- Full Looking Glass functionality with optimized 3-column layout.
- Integrated Iperf3 and Download Test features.
- Dual stack IPv4 and IPv6 support.