Forum Discussion
[Workaround]: Prevent iRule Managers to accidentally enter invalid characters into a Data Group
We realized some time ago that the BIG-IP GUI does not handle UTF-8 encoded strings very well in Data Groups which result in ever growing data records for everytime the Data Group is saved.
This is an example on how to reproduce the problem and to see it in action:
- Start by creating an empty new data group named TEST of the type string.
- Add a line with the key test1 and the value abcåäö123 (copy and paste if you don't have a nordic keyboard)
- Click finish
- Check with tmsh list ltm data-group internal TEST
- Now go to the GUI again and add a second line with the key test2 and the same value abcåäö123
- Click update
The result of this is that eventually you will receive the following error from the BIG-IP (even if you only update lines that are not containing 8-bit ascii characters).
Workaround
Luckily we require the iRule Managers to login to an APM portal (webtop) where we have published a Portal Access to the administrative GUI of the BIG-IP, and since we do that, we can inject some JavaScript the will check the data before it saved.
iRule PREVENT_INVALID_DATA_IN_DATAGROUP-IRULE
This iRule will inject some JavaScript code that will prevent these mistakes from happening
when HTTP_REQUEST {
set inject_code 0
if {[HTTP::path] ends_with "/tmui/tmui/skins/Default/scripts/skin.js"} {
set inject_code 1
STREAM::disable
HTTP::header remove "Accept-Encoding"
}
}
when HTTP_RESPONSE {
if {$inject_code == 1} {
set s1 "this.form.submitError\ =\ formSubmitError;"
set r1 "this.form.submitError\ =\ formSubmitError;\n"
append r1 "if\ (document.location.href.indexOf('datagroup')\ >\ -1)\ {\n"
append r1 "select\ =\ document.getElementById('class_string_item');\n"
append r1 "if\ (select\ !=\ null)\ {\n"
append r1 "console.log('We\ found\ the\ select');\n"
append r1 "for\ (option\ of\ select.children)\ {\n"
append r1 "key\ =\ option.value.substr(0,\ option.value.indexOf('\\\\x0a'));\n"
append r1 "if\ (!\ /^\[\\x00-\\x7F\]*\$/.test(key))\ {\n"
append r1 "alert('String\ \"'+key+'\"\ contains\ invalid\ characters!');\n"
append r1 "return\ false;\n"
append r1 "}\n"
append r1 "if\ (!\ /^\[\\x00-\\x7F\]*\$/.test(option.value))\ {\n"
append r1 "alert('Value\ of\ \"'+key+'\"\ contains\ invalid\ characters!');\n"
append r1 "return\ false;\n"
append r1 "}\n"
append r1 "}\n"
append r1 "}\n"
append r1 "}\n"
STREAM::expression "@$s1@$r1@"
STREAM::enable
}
}
Now if you add a streaming profile to your APM Virtual Server and add this iRule the user will be presented with a popup informing them about the invalid data and also prevent them from submitting it.
Hope this can be of help until F5 fixes this in the BIG-IP
- Leslie_HubertusRet. Employee
Thanks so much for sharing this, EvTheFuture!
Recent Discussions
Related Content
* Getting Started on DevCentral
* Community Guidelines
* Community Terms of Use / EULA
* Community Ranking Explained
* Community Resources
* Contact the DevCentral Team
* Update MFA on account.f5.com