• And we descend deeper into the bad old days of "this site best viewed with…"

    Home » Forums » Outside the box » Rants » And we descend deeper into the bad old days of "this site best viewed with…"

    Author
    Topic
    #2135639

    I thought it was interesting when I read, not too long ago, that Google had decided to lead the charge against tailoring content based on useragent strings.  It’s about time that this practice fade into oblivion!

    Each browser sends an identifier known as a useragent string with HTTP requests, but there’s no standard format, and it’s become a convoluted mess.  Consider Google’s own useragent from Chrome:

    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3835.0 Safari/537.36

    Look at all the things it’s claiming to be.  Mozilla, first of all, which is not true.  AppleWebKit, which is also not true, including AppleWebKit’s claim to be KHTML, which is also also not true, both when Apple claims it and when Chrome claims it while claiming to be Apple.  Blink was forked from WebKit, which was forked from KHTML, but it’s not either of them.  Finally, it claims to be Safari, which is not true.

    Chrome is the de facto standard browser for most people, and each time it connects, it claims to be four things it is not!

    It’s been an insane mess for years, and it’s been famously lampooned by a humor piece called “History of the User-Agent string.”  That piece was written in 2008, and you’d hope that by now, things would have gotten better.  If it had, would Google feel compelled to try to get rid of it?

    Yes, Google, the owner of Youtube, where I just got a message in my fully-updated Waterfox Classic:

    stop

    Wait, when did YouTube or Google ever give people support for Waterfox?  I’m not interested in any support from the likes of them; if I have an issue, I will sort it out on my own, thanks.

    Somehow, I think they’re using that “other” definition of “support” once again.

    The same company that recognizes the stupidity of useragent string sniffing enough to try to use their influence as developer of the most used browser in the world to eradicate it… is using the practice themselves.

    Notice that there’s no close box.  You have to follow the link and press “remind me later,” the only choice.  “Don’t bother me with this nonsense ever again” is noticeably absent.  Not that it would work, in my case, as Google cookies have a very short life expectancy on my PC.  I can get rid of the offending message by hiding that element with uBlock Origin, but if YouTube decides to be dumb about it like Chase and Netflix, I will have to spoof the useragent with them too.  If they actually want to make the site rely on features that don’t exist in Waterfox Classic, that’s even worse– accessibility demands that a site work with any browser a user wishes to use, down to the text-only Lynx or a browser without Javascript.  Many sites ignore this, but the likes of Google, synonymous with the web for many people, should do better than that.

    Spoofing the useragent string is simple, but the ease with which it can be done illustrates one of the reasons useragent sniffing is bad practice.  It’s unreliable.  I can claim to be any browser I want, including the Google web indexing bot (which can supposedly penetrate paywalls in some cases).  If they want to use certain features that only some browsers offer, detect these features directly, and if they don’t exist, deliver the error based on the actual failure of my browser to work.

    Other times, it gives the nannybot at the site in question the wrong idea.  They see the bit of Waterfox Classic’s useragent string that suggests it’s Firefox 56 (that was the version from which Waterfox classic was forked), and they think I am using a long-neglected installation of Firefox.  If the sniffer script is not programmed specifically to look for “Waterfox,” all it will see is the “Firefox/56” bit, and it will get the wrong idea.  The same’s true for any other of the many browsers that identify as themselves, but do not have enough market share to make it worth it for the writers of the scripts to specifically look for them.  Because each browser claims to be lots of things, rather than concluding that a browser the script does not know is an unknown browser, it will think the browser is the most recent of the other things the script recognizes that the browser claims to be in the useragent string.

    I’m actually using a browser that is completely up to date, not that it’s any business of anyone, but I keep getting told that I’m out of date by scripts that know a lot less about what I am using than I do.

    As I mentioned, the services offered by a web giant like Google should generally work with any browser, but sometimes there are specific features that are needed, like a new version of TLS encryption that a given banking site may require when the older ones are found to be insecure.  Now that Flash is all but gone, requiring HTML 5 to view videos on YouTube would similarly make sense.  Any lack of browser features short of that should degrade gracefully, allowing the rest of the features to work, just not the ones required by the feature in question.  Simply denying access blindly because of an easily-misparsed useragent string is almost always the worst way of going about it.

    Google, and all you other sniffers, out there: Stop!

    Dell XPS 13/9310, i5-1135G7/16GB, KDE Neon
    XPG Xenia 15, i7-9750H/16GB & GTX1660ti, KDE Neon
    Acer Swift Go 14, i5-1335U/16GB, KDE Neon (and Win 11 for maintenance)

    • This topic was modified 3 years, 7 months ago by Ascaris.
    • This topic was modified 3 years, 7 months ago by Ascaris.
    10 users thanked author for this post.
    Viewing 3 reply threads
    Author
    Replies
    • #2135909

      Great posting! I have Google as my default page in all my browsers, in both my computers, so it is always ready for doing a search in the Web, something I do very often (old habit, bad habit, I know, but an old leopard can’t change his spots too much, can he?) And Waterfox is my default browser in both my PC and my Mac… So here I am, the canary in the mine, so to speak.

      So far, I haven’t had the “pleasure” of the experience described by Ascaris, and I am wondering: “Why not me? What’s wrong with me?” and I am feeling a bit left out, to be quite frank with you. But if and when that comes to pass, I’m sure I’ll cheer up right away and then I’ll come back to comment some more here. You bet.

      Also, going from what Ascaris has written, do all browsers tell lies like that? And why? Or is the situation one where many sites will only allow one or two browsers and if yours is not one of them, although it is functionally quite able to navigate those sites, it will be prevented from doing so unless it pretends to be something else? And why would a properly setup site with a serious discriminating bias be fooled by a browser that claims to be seven different things at once?

      Ex-Windows user (Win. 98, XP, 7); since mid-2017 using also macOS. Presently on Monterey 12.15 & sometimes running also Linux (Mint).

      MacBook Pro circa mid-2015, 15" display, with 16GB 1600 GHz DDR3 RAM, 1 TB SSD, a Haswell architecture Intel CPU with 4 Cores and 8 Threads model i7-4870HQ @ 2.50GHz.
      Intel Iris Pro GPU with Built-in Bus, VRAM 1.5 GB, Display 2880 x 1800 Retina, 24-Bit color.
      macOS Monterey; browsers: Waterfox "Current", Vivaldi and (now and then) Chrome; security apps. Intego AV

      1 user thanked author for this post.
      • #2136192

        The weird way that useragent strings evolved is pretty well described by the humorous (but informative) article I linked in the first post.  The practice of lying in useragent strings was a response to useragent sniffing!

        “Mozilla” was historically the way that Netscape Navigator identified itself in the useragent.  Back in those days, there were sites that were “best viewed with Netscape.”  If Netscape developed a neat new feature, like frames (now considered obsolete, but they were really popular back then), sites would deliver Netscape-specific HTML pages to use frames, and everyone else would get a different page without them.

        The competition in the browser market was strong, so it would not be long before the competing browsers would add the missing feature, but many web sites were still sniffing the useragent and delivering the lesser page to non-Mozilla.  The other browser makers just added “Mozilla” in there so that the sniffer would think it was Netscape and deliver the full-featured page.  These days, all of the common browsers (IE, Edge, Safari, Chrome, Firefox, and derivatives thereof) have useragent strings that start with “Mozilla,” and it all started way back then.

        That kind of thing continued on and on, and so the useragent strings have had more and more stuff tacked on.  There’s no definitive format that would have well-defined fields for the browser, the version, and the OS… it’s just a string, and you probably know how strings are parsed.  Since there’s no defined browser field, a script has to know specifically what to look for in order to make sense of it.  For another example, here’s Firefox’s useragent on my Neon PC:

        Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0

        and here’s Waterfox Classic’s:

        Mozilla/5.0 (X11; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0 Waterfox/56.3

        You can see how a parser that doesn’t know that Waterfox exists would just go through that string and find “Firefox/56” and think that was what the browser was.  It’s not Firefox 56, but a parser that isn’t specifically looking for Waterfox won’t know that.

        Firefox and Chrome are open source, so anyone could take the code and create their own browser, and deciding what to do with the useragent string will be an issue.  A browser developer could go bold and decide to unabashedly call the browser what it is with no fibbing, but none of the sites that have sniffers would recognize it. That would invariably lead to problems, as many sites have a list of “supported” browsers, and anything else (including unknowns) is “unsupported.”  Netflix is that way.

        The more common way that these browser devs handle it is in the way that it is in Waterfox… to keep the base useragent string from the base browser, and add on a bit at the end that accurately describes the browser.  Sites that merely look for “Firefox” will thus work with Waterfox, and by far most of them do.  Those that want to nanny me and make sure I have my browser updated like a good boy will see “Firefox/56,” with the aforementioned results.

        You can see some other interesting bits in there.  The Firefox useragent threw an “Ubuntu” in there, but the second one didn’t, even though they’re running on the same Neon installation.  On the netmarketshare.com listings, “Linux” and “Ubuntu” are listed separately, and you can see how with Firefox, I’d be adding to the Ubuntu tally, but with Waterfox Classic, I would be adding to the generic Linux tally.

        Firefox useragents used to include the build date of the browser (and therefore the Gecko engine), but they stopped doing that years ago.  Still, the last date remains in there, January 1, 2010, so that sites that look for that still work.  Like the “Mozilla/5.0” part at the start, it’s obsolete, but if the browser devs take it out, some sites may not work, and the complaints will roll in.  That’s been the story with useragents from the start, and it’s why they lie.  It’s really no different than when the end users spoof the useragent… it’s a deliberate fib to trick the web server into delivering the correct page when it otherwise wouldn’t.

        Feature detection is a much better way.  If your site requires HTML 5, simply have it ask the browser if it can do HTML5, and if the answer is no, then tell the user there’s a problem.  There are some rare exceptions, but in nearly all cases, useragent sniffing is not useful or necessary for the proper operation with a given site.  If you want your site to try to nanny your visitors into getting updates, then you may have to use it, so maybe stop doing that!

         

         

        Dell XPS 13/9310, i5-1135G7/16GB, KDE Neon
        XPG Xenia 15, i7-9750H/16GB & GTX1660ti, KDE Neon
        Acer Swift Go 14, i5-1335U/16GB, KDE Neon (and Win 11 for maintenance)

        3 users thanked author for this post.
    • #2135988

      +1

      I routinely do browser spoofing because it’s necessary at a lot of sites. I keep a big collection of downloaded software that I carry on an external drive, and for titles that have both Windows and Mac versions, it’s common that they query browser UA strings and allow download of only the version that corresponds with the UA (and assume that you’re installing immediately). Thus, to download a Mac version under Windows, I frequently have to spoof that I’m running a Mac.

      I’m a long-time user of Mozilla Seamonkey, and it’s been a common issue for years, of sites demanding Firefox, even if Seamonkey runs the same code.  Seamonkey is fully-supported with security updates, but I’m seeing more and more sites complaining about outdated software, because the current version of Seamonkey still reports (correctly) that it’s based on Firefox 52.9.  Sometimes, the complaint is that Seamonkey is outdated (implied: not up to date on security fixes), and where sniffing ignores that my UA shows both Firefox and Seamonkey.  Sometimes, the objection is phrased as implying that there’s features in Gecko 60 and later that aren’t supported.  However, I have yet to see a site that has any problems if I set my UA string to show a newer version of Firefox.

      Assuming that a UA string (and using sniffing to test) is as lame as assuming that the contents of a From: line  (both display name and true address) in an email message is valid.  Both are trivial to forge.

    • #2136184

      @ascaris, I use Pale Moon (fully up to date) and today I, too, got that [message] about updating my browser. I’m not familiar with this stuff: what changes would I need make to prevent that notice, and how would I go about it?

      Thanks!

      • #2136190

        OK, an email address may be spoofed, but it still has to be at last real-looking enough to pass for something that might be real. So, if I might be so bold as to ask this again:

        Why would a properly setup server accept without a moment’s hesitation a request from a browser that claims to be several different browsers at the same time? Wouldn’t that be a little suspicious?  Or isn’t this a good question? And if it isn’t, why is that? I ask, because asking is a good way to learn. If the questions are the right ones, of course.

        Ex-Windows user (Win. 98, XP, 7); since mid-2017 using also macOS. Presently on Monterey 12.15 & sometimes running also Linux (Mint).

        MacBook Pro circa mid-2015, 15" display, with 16GB 1600 GHz DDR3 RAM, 1 TB SSD, a Haswell architecture Intel CPU with 4 Cores and 8 Threads model i7-4870HQ @ 2.50GHz.
        Intel Iris Pro GPU with Built-in Bus, VRAM 1.5 GB, Display 2880 x 1800 Retina, 24-Bit color.
        macOS Monterey; browsers: Waterfox "Current", Vivaldi and (now and then) Chrome; security apps. Intego AV

        1 user thanked author for this post.
        • #2136204

          Why would a properly setup server accept without a moment’s hesitation a request from a browser that claims to be several different browsers at the same time? Wouldn’t that be a little suspicious?

          User-agent parsers don’t perceive any problem with browsers claiming to be many things, for a bunch of reasons.  First, all of the browsers do it, and they have all been doing it for decades.  Every browser out there in common use claims to be Mozilla, but only Firefox is actually a Mozilla product.  Even then, it’s not Mozilla/5.0 (meaning Netscape 5)!  Firefox was based on the Mozilla Suite 1.0 (now Seamonkey), which in turn was the unbranded version of Netscape 7.

          Second, a user-agent parser is a relatively simple thing.  It can only recognize things it was programmed to recognize.  If it hasn’t been told that “Waterfox” is a browser, it has no idea what that word in the useragent string means.  They typically look for various substrings within the useragent string, like “Chrome” or “Firefox”, along with the version number that immediately follows, and when it finds one it recognizes, that’s what it concludes it is dealing with.  That’s what YouTube is doing… it doesn’t look for Waterfox in the string, so it finds the bit about Firefox 56 and thinks I am using that.

          It’s also possible that a parser will find something in the string and decide that it doesn’t know what it is, even if it has otherwise recognized info.  If the site is one of those that has certain “supported” browsers and denies access to everything else, being put in the “unknown” category is not a good thing either.

          Sites should not be denying access to anything based on useragent strings.  It was that very practice that led the browser developers to put all those fake bits in the strings!  It isn’t necessary for the site to know what browser the visitor is using.  All of the information it needs to deliver the content is available by feature detection.  Netflix can detect that a browser has the correct version of the Widevine plugin; a bank can detect that a browser has the correct version of TLS, and so on.  There are some edge cases where useragent sniffing can be indicated, but in nearly all cases, it’s completely unnecessary to pay it any mind at all.

          Dell XPS 13/9310, i5-1135G7/16GB, KDE Neon
          XPG Xenia 15, i7-9750H/16GB & GTX1660ti, KDE Neon
          Acer Swift Go 14, i5-1335U/16GB, KDE Neon (and Win 11 for maintenance)

      • #2136207

        @ascaris, I use Pale Moon (fully up to date) and today I, too, got that [message] about updating my browser. I’m not familiar with this stuff: what changes would I need make to prevent that notice, and how would I go about it? Thanks!

        You can spoof the useragent to tell the site you are using something else.  In Waterfox, and probably in Pale Moon, you can use about:config to set general.useragent.site_specific_overrides (boolean) to true, and then you can create prefs for each site.  For youtube.com, it would be

        general.useragent.override.youtube.com

        (type string).  The pref won’t exist, but you can create it.  You can put the useragent string you want to use in there,  and on that domain, it will use that instead of the default.  You can find useragent strings for all kinds of things on the web… just search for something like ‘useragent firefox windows’ or whatever you want.

        For setting it on the fly for experimenting to see what works, an addon is the easiest way to do it.  I use both– for Netflix, I have an override set in the prefs, and I also use an addon for sites I don’t use much.  I don’t like setting the useragent to pretend to be something else permanently, as I want the site owners to see that people are using less common browsers and operating systems to visit.  I could pretend to be using Chrome on Windows 10, and it would have the greatest chance of working with the most sites, but I would rather be counted as what I am.

        You can also use an adblocker to hide the browser warning element from youtube.com.  That’s what I did.

        Dell XPS 13/9310, i5-1135G7/16GB, KDE Neon
        XPG Xenia 15, i7-9750H/16GB & GTX1660ti, KDE Neon
        Acer Swift Go 14, i5-1335U/16GB, KDE Neon (and Win 11 for maintenance)

        1 user thanked author for this post.
        • #2136218

          Thanks @ascaris, that was informative.

          I went into Pale Moon’s about:config, and it turns out that there already is an “override” line for YouTube:

          general.useragent.override.youtube.com;Mozilla/5.0 (Windows NT 6.1; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0 PaleMoon/28.8.2

          Not sure that using an ad blocker to hide the YouTube warning would help: if and when Google ultimately decided to make good on the warning, wouldn’t YouTube simply cease to work on PM?

          So then, should I edit that override line to indicate a more recent version of Firefox–say, 56.0 like your Waterfox has it?

          (P.S. I haven’t got the hang of pasting something in as text. I clicked on the “Paste as text” button in the extended editing menu and then Ctrl-V’d the override string into this post, but when I saved it it still came out as proportional spacing text.)

          • This reply was modified 3 years, 7 months ago by Cybertooth.
          • This reply was modified 3 years, 7 months ago by Cybertooth.
          • #2136629

            Not sure that using an ad blocker to hide the YouTube warning would help: if and when Google ultimately decided to make good on the warning, wouldn’t YouTube simply cease to work on PM? So then, should I edit that override line to indicate a more recent version of Firefox–say, 56.0 like your Waterfox has it?

            If they ever did decide to block “unsupported” browsers rather than to nag about them, then yes, the adblocking element would not help.  I’m guessing it’s all bark and no bite at this point, but you never know.

            I wasn’t aware that the warning was tied to the old Youtube style, which I have enabled with user scripts.  I’d rather keep the old style and block the error than to just give in and use the new style, but that’s only a temporary issue, as Google is forcing the issue by getting rid of the old style anyway.  That’s the pattern in so much of computing… introduce something new as an option, wait to see how it works, then make it mandatory so the old way (often the better way) can be deleted.

            If you were going to spoof the useragent, I would go for something newer than Waterfox Classic, as it’s old enough to generate errors too.  The Firefox 71 useragent for my PC was in the first post in this thread if you want it!  You can copy it as-is, or switch the Linux bits for Windows if you’d prefer.  When I spoof, I use whatever the latest version of Firefox is at that moment while keeping the Linux bits.  I only change those if the site requires it.

            The update @satrow mentioned for this issue should take care of it, and it’s probably just a change to the default PM spoofed useragent for YouTube.

            Dell XPS 13/9310, i5-1135G7/16GB, KDE Neon
            XPG Xenia 15, i7-9750H/16GB & GTX1660ti, KDE Neon
            Acer Swift Go 14, i5-1335U/16GB, KDE Neon (and Win 11 for maintenance)

            1 user thanked author for this post.
            • #2136872

              The Firefox 71 useragent for my PC was in the first post in this thread if you want it!

              I managed to cram two errors into one short sentence.

              It’s Firefox 72 that is in the post, and it’s not the first post in the thread.  It’s in my first reply in the thread, which is the third post overall.  Eek!

              Dell XPS 13/9310, i5-1135G7/16GB, KDE Neon
              XPG Xenia 15, i7-9750H/16GB & GTX1660ti, KDE Neon
              Acer Swift Go 14, i5-1335U/16GB, KDE Neon (and Win 11 for maintenance)

              1 user thanked author for this post.
        • #2136452

          My experience is that this kind of thing happens with any Firefox-derived browser, whether Waterfox, Palemoon, Seamonkey, or anything else.  Some sites will barf if they see a UA string that shows something other than stock Firefox.  With Seamonkey, that’s an issue with Google’s home page, where a cursor doesn’t get centered properly in the search bar.  If I spoof to show a standard Firefox string, then that goes away.

          I do most of my spoofing via the old PrefBar extension (no longer developed), and there’s a number of extensions in Firefox that allow for spoofing.  I haven’t checked to see what Palemoon or Waterfox might support.

          For sites that I visit frequently in Seamonkey, I will do about:config entries for general.usearagent.override — standard Firefox for Google, newer versions of Seamonkey (that include Firefox 60) for a couple of financial institutions that object to the standard Seamonkey UA that still shows Firefox 52), so that I don’t have to continually enable spoofing, and then turn it off when I no longer need it.  In Seamonkey, spoofing also affects outbound email, and it looks really funny for an email that looks like it’s been sent with Firefox.

          Beyond bogus claims of possible capacities limitations, the place where I most often see sites demanding Firefox (and not liking derivatives) tends to be with financial institutions. I think a lot of it is a matter of what they’re willing to support.  If a customer is having problems, they want a very limited set of browsers, where they can tell a user “click here, go to there, set that”, etc.  Thus, they have no interest in supporting users with other browsers — even if all the capacity is there, if there’s any difference in the navigation paths to settings, they don’t want to hear “Firefox capable”, all they are willing to deal with is stock Firefox.  Thus, using browser sniffing to shoo everybody else away.

          At that point, set your browser to show Firefox (and don’t show the true browser name, as necessary) to get around the sniffing.

          The one thing that I find interesting is that I’m only aware of this happening with Mozilla-derived browsers. I haven’t heard of problems with Chrome variants, such as Iron, Epic, Opera, Brave, etc.

          • #2136635

            The one thing that I find interesting is that I’m only aware of this happening with Mozilla-derived browsers. I haven’t heard of problems with Chrome variants, such as Iron, Epic, Opera, Brave, etc.

            I’ve seen reports of people having problems with Chromium on some sites (Netflix?), since its useragent doesn’t contain the word “Chrome.”  Some of the alternative Chromium-based browsers (Vivaldi, for one) just use the unmodified Chrome useragent to prevent such problems, with no mention at all of the actual name of the browser.  That offers the maximum compatibility, but it also signals to the web site owners that you’re just one of the many people who use Chrome, and therefore supports the idea that it’s ok to ignore less common browsers.  The useragent sniffing thing is just a vicious cycle!

            Dell XPS 13/9310, i5-1135G7/16GB, KDE Neon
            XPG Xenia 15, i7-9750H/16GB & GTX1660ti, KDE Neon
            Acer Swift Go 14, i5-1335U/16GB, KDE Neon (and Win 11 for maintenance)

            1 user thanked author for this post.
      • #2136221

        Pale moon was updated a couple of days ago to workaround that Google YouTube nonsense.

        http://www.palemoon.org/releasenotes.shtml

        v28.8.2.1 (2020-02-04)
        This is a minor release in response to YouTube deprecating their old web UI. This change will enable the new YouTube UI by default.

        1 user thanked author for this post.
    • #2136230

      I am getting the impression, from what Satrow has written above about Palemoon and what I think Ascaris meant to say about Waterfox, that I am probably also OK now with Waterfox, my default browser. So far I have noticed nothing unusual when looking at a couple of videos in YouTube, today, and now I’m writing this here without any problems, using WF as browser. Let’s hope everyone gets through the coming days without encountering the inconvenience that is the topic of this thread.

      Ex-Windows user (Win. 98, XP, 7); since mid-2017 using also macOS. Presently on Monterey 12.15 & sometimes running also Linux (Mint).

      MacBook Pro circa mid-2015, 15" display, with 16GB 1600 GHz DDR3 RAM, 1 TB SSD, a Haswell architecture Intel CPU with 4 Cores and 8 Threads model i7-4870HQ @ 2.50GHz.
      Intel Iris Pro GPU with Built-in Bus, VRAM 1.5 GB, Display 2880 x 1800 Retina, 24-Bit color.
      macOS Monterey; browsers: Waterfox "Current", Vivaldi and (now and then) Chrome; security apps. Intego AV

      • #2136873

        I am not sure what you’re saying.  Why wouldn’t you be okay with Waterfox?  Even if you saw the message, it’s just a meaningless nanny-warning that can be ignored or removed quite easily in any case.

        Unfortunately, useragent sniffing seems to be on the upswing, even though it’s been known as bad practice for well over a decade, and with nearly everyone using standards-compliant browsers, has never been more unnecessary than it is now.  Better to have the tools to deal with it rather than let lazy (at best) site owners decide what browser you’re going to use.

        Dell XPS 13/9310, i5-1135G7/16GB, KDE Neon
        XPG Xenia 15, i7-9750H/16GB & GTX1660ti, KDE Neon
        Acer Swift Go 14, i5-1335U/16GB, KDE Neon (and Win 11 for maintenance)

    Viewing 3 reply threads
    Reply To: And we descend deeper into the bad old days of "this site best viewed with…"

    You can use BBCodes to format your content.
    Your account can't use all available BBCodes, they will be stripped before saving.

    Your information: