It seemed like the summer of code would never end… but we're here at last, with a fresh release!
Our shiny new feature is mentions. Ever wanted to know when someone said your name? Now you can, as long as they used @/[name]/[icon]. Mentions are not monitored in PMs, or from users you've banned. Try them out when posting your next commission or request!
The new ib! username shortcut prefix can also be used for this, similar to fa!, da!, sf! and w! We think you'll appreciate being notified; but if not, you can disable the feature.
We've continued to refine our cache network and image preloading system:
* Caches opened in France, Quebec, Chicago and New Jersey. * Tokyo and Sydney caches upgraded to 2TB/month transfer; they now serve recent original-sized files. * São Paulo cache upgraded to support IPv6; all caches now write data using asynchronous I/O. * Closed Singapore and Johannesburg caches after conclusion of one-year trials. * Occasional cache-full outages eliminated by nginx bug fix. * Upgraded caches to support latest HTTP/2 standard, ALPN. * Enabled OCSP stapling, reducing the time to establish a secure connection. * Tweaked image preload on Chrome/Opera to prioritize on-screen content over adjacent pages. * Use <link rel="preconnect"> to accelerate initial connection to a content server.
We've made several other infrastructure changes in the last six months:
We've overhauled notification counts, with fixes and performance improvements for account and journal deletion, submission publication, friend-status changes, tickets, and deleting friends' comments.
Security got more attention, in part due to issues elsewhere. We've encrypted support ticket contents, removed support for unused image formats (also saving 200MB), improved the security of tickets and private messages while at rest, and enhanced SQL/image format sanity checking.
Other security related changes include:
* Use time-constant comparisons and insert random delays to defeat timing attacks. * Always check password even if IP range check fails, to avoid identifying accounts using the feature. * Attempt to preclude HTTPoxy and more SQL injection attacks. * Prevent fishing for valid email addresses via the password reset system. * Upgrade length and widen character set used to salt hashes. * Use cryptographically-secure pseudorandom number generator for reset/activation/verification codes. * Increase length of auto-suggested passwords. * Rate-limit per-IP and per-account for password reset, account activation. * Run checks on account and allowed IP addresses before password checks. * Switch passwords and reset codes to use a stronger hash format on login. * Limit string length for user credentials to prevent denial of service. * Sanitize numeric entries in cookies; remove null bytes in user entry and various API calls. * Properly sanitize content server and background time of day preferences when set. * Avoid backing up site/server data which can be regenerated from scratch. * Restrict read and write access to uploaded files to web server user. * Include user activation when checking the user session. * Specify expected file types when interacting with image processing software. * Improve base name validation of incoming filenames; don't allow .php as a file name. * When checking new password suitability, use POST rather than GET to avoid logging. * Avoid shelling out where PHP functions exist for common tasks. * Filter and/or collapse dangerous symbols in file names for uploads/editing. * Improve checks for invalid/hidden/symlink files in bulk uploads. * Prevent private file handler from using symlinks; scrutinize file extensions and MIME types. * Kill database connection manager during emergency shutdown. * Remove obsolete sales and payment information from the database. * Update email software; force use of plain-text email; prevent advertising version in X-Mailer. * Disable obsolete finance reporting/print processor management and remove relevant data.
No site is perfect here, but we improve where we can. If you notice a problem, let us know!
Our API has had the following changes: * Prevent non-requested parameters from being returned in the Submission API. * Expose stable unique content_tag_id for ratings in the Submissions API. * Add several error codes relating to new/modified functionality.
* Set 980px viewport; adjust shadows and main navigation positioning to fit. * Avoid front-page section header wrapping on mobile. * Abbreviated comment/submission status notices, guest warning and user stats for mobile. * Fix flick scrolling on IE/Edge by removing position: relative style from <body> tag. * Condense search hints and trim artist and +favs-by inputs. * Trim Main/Scraps Gallery links on submission view to avoid overflow on scaling. * Set background colour on <html> element (avoids white flash as Android address bar hides). * Render background in a <div> below <head>; enables hardware rendering with transform: translateZ(0) while preventing fixed image resize popups from scrolling on Chrome/Safari.
Other minor and cosmetic site changes:
* Restore old pool order page as an option, for those without drag'n'drop ability. * Add ability to bulk publish without notifying watchers, for accounts with bulk publish enabled. Like bulk upload, you can request this via a support ticket; work must meet keyword/content policies. * PNG uploads should use JPG for preview to match extension, not force PNG. * Rollback gracefully if file/thumb upload/replacement fails (e.g. due to invalid format). * Don't stop journal submission if we warned about a bad title and they fixed it. * Remove temporary search result set names from session data. * Switch to Lanczos2 resize filter to fix ringing on high-contrast content/backgrounds. * Default to viewing current user's +favs if no user specified. * Simplify keyword suggestion/+fav notifications by removing them on submission deletion. * Expand journal title to fill available width. * Fix loading of HD version of tall images where width is less than 920px. * Don't allow the load HD option if the full-size image is only 920px or less. * Don't show "HD Loading" if the user is in the wide mode by default. * Make small default view mode loads "SD" medium-size image on first click. * Restore middle-click opening file in a new tab on IE and Chrome. * Reduce minimum account age before a user may suggest keywords to one week. * Remove superfluous referrer checks on various UI actions. * Fix cut-off animation warning for GIF files in small view mode. * Fix "show custom thumbs" link running into thumbnails on Members page. * Explain that comment deletion entails removal from view, optional notes are visible only to staff, and banning will preclude receipt of private messages as well as comments. * Clarify that file replace can replace both files and thumbs. * Don't consider the virtual pools used for gallery navigation when preloading. * Don't assume there are any prev/next items in the gallery. * Don't assume queries returned results when clearing temporary search tables. * Preserve "fit to window" aspect ratio when enlarging the window. * Force vertical scrollbar to avoid background/horizontally centered content jumping. * Properly handle HTML entities (e.g. apostrophes) when editing multi-line character sheet fields. * Center-align first/last in pool text on submission view; add padding benath submission. * Separate setting of background-size to keep IE8 from showing a white background. * Use cancelBubble if event.stopPropagation is unavailable (IE8 support). * Fix image resizing on IE8, where "this" is only ever the window object. * Remove shadowed image class while determining image dimensions to fix scrolling. * Don't zoom narrow images to greater than 100% width when in medium mode. * Don't record a HD image resize click as a download event in website stats. * Use account name or all-numeric ID for Pixiv contact details, replacing URLs. * Use HTTPS links for Twitch, Drawpile and Piczel contact details. * Encourage streaming links to be added to user profiles as contact details. * Add staff preference to show deleted submission and journal records on userpages. * Improve bulk submission upload instructions. * Don't return user to change password page after successful login. * Use temporary unavailability status code to avoid maintenance mode page being cached. * Cache error page with unique code in URL to permit removal from session. * Remind members they can change their username rather than create a new account. * Replace invalid characters in uploaded filenames rather than redirect to an error page. * Remove files incrementally while processing a bulk upload. * Fix infinite loop in private file handler if read fails. * Be more generous with failed logins to avoid triggering unnecessary CAPTCHA test. * Log username changes and password resets in staff account notes. * Include website visitor statistics in backups. * Shuffle and condense adult content warnings on rating setting page. * Set max-height to 'none' when fitting a clicked image to the page. * Flush data compression buffers prior to flushing general output. * Show progress when recalculating keyword masks. * Avoid specifying redundant POST method for scripted requests, as it's the default. * Remove execution time limit when when recalculating notice counts and keyword masks. * Set maximum execution timeout to half an hour to reduce failed bulk uploads. * Prevent normal pngcrush output from filling Apache logs. * Don't try to close the watch options box when the user clicks outside the window. * Use current revision images on maintenance mode screen. * Prevent user-initiated account deletion if PM system is offline, as we can’t send a confirmation. * Email account owner when their deletion request has been processed, rather than send a PM. * Use email software's inbuilt validator for email addresses. * Store internationalized domain names as punycode. * Fix staff email reverification feature. * Clearly explain why a password failed if it contains your username. * Cut unused support for quote feature in private messages. * Fix cron errors due to minimal shell environment path. * Don't try to send email if no valid email address was specified. * Rework layout of submission details to avoid published date overlapping MD5 section. * Fix an issue where site status might not be displayed if the user has unread notices. * Add a time limit for re-sending the activation email (which may take minutes to arrive). * Enforce default submission, journal, and stream announcement titles if missing; trim whitespace. * Enhance multiple-click detection for submission details page. * Trim new email addresses in account settings to avoid spurious errors. * Remove overly-restrictive warning about characters valid in password. * Fix edge-case where a submission type was not set if the first file upload failed. * Ensure re-verification email has a From: name, not just an address. * Document procedures for btrfs snapshots, mdadm rebuild, and VBox raw disk usage. * Use the phrase "unset friends only" rather than "remove friends only" on gallery dropdown. * Remove accepted friend request notices before adding a new one when re-friending. * Remove apostrophes around activation/reset codes in emails to avoid confusion. * Fix handling of private files with "noncustom" at the end of their names. * Add staff note if account email address changed by staff. * Add multi-submit protection to settings page and staff account administration. * Add sanity checks for submission file and unread notification cleanup operations. * Fix logic error in content server addition/update system. * Reduce columns selected from database tables where not all data in a row is required. * Remove obsolete keyword management functions.
As with all changes, there's potential for new issues - some of you may have noticed spurious mentions emails earlier in the week. If you do find a problem, please file a support ticket and we'll take a look!