Redact sensitive data
Ensure secure remote screen viewing using the redaction API to automatically block sensitive data such as credit card details, social security numbers and more.
When remotely viewing a user's screen, there may be certain sensitive data that should not be viewable by the agent.
For this purpose, we provide a redaction API that automatically blocks out on device all sensitive data sources such as credit cards, social security numbers, etc. When certain data is redacted, it will never leave the user's device.
Cobrowse provides two methods for redacting sensitive data in your applications:
1. Define the redacted views in your app source code (recommended)
This is the recommended method as it will make sure your redactions are tied to application or websites code version.
Redactions are defined as CSS selectors, passed as an array to the Cobrowse SDK. We recommend using a simple css class to signify redaction where possible, although more complex selectors will also work.
CobrowseIO.redactedViews = ['.redacted', ...some other selectors...]Selectors can also be scoped by URL or glob pattern by providing an Object where the key is the URL or glob pattern and the value is the array of String CSS Selectors to redact when viewing that page.
The example below will always redact any element with the redacted class but will only redact all input elements when viewing any example.com page.
CobrowseIO.redactedViews = [
'.redacted',
{ 'example.com*' : [ 'input' ] }
]Unredaction aka Private by Default
Our web SDK also supports an un-redaction mechanism, where by you can define sub-elements inside of a redacted element that should be visible to the agent. You can specify un-redaction selectors like this:
CobrowseIO.unredactedViews = ['.unredacted', ...some other selectors...]To redact a single view you can call cobrowseRedacted on any UIView or SwiftUI View.
// UIKit
let uiView = UIView()
uiView.cobrowseRedacted()
// SwiftUI
let swiftUIView = ExampleView()
swiftUIView.cobrowseRedacted()Any children of the view will also be redacted allowing you to redact container views like VStack or a UIView that contains subviews.
Redact within UIViewController via CobrowseIORedacted
You may wish to return all the views that should be redacted at once per view controller. By conforming your UIViewController to CobrowseIORedacted you can proved the reference to each UIView that should be redacted.
class ExampleViewController: UIViewController, CobrowseIORedacted {
let imageView: UIImageView
@IBOutlet weak var label: UILabel!
...
func redactedViews() -> [UIView] {
[imageView, label]
}
}Redact within custom delegate via CobrowseIODelegate
If you can't make changes to the UIViewController or you wish to centralize your redaction logic. You will need an object that conforms to CobrowseIODelegate and implement the cobrowseRedactedViews(for vc: UIViewController) within it.
This method provides you with the UIViewController whereby you return the views within that view controller you wish to redact.
Be sure to set the delegate property to your custom delegate before calling start().
Unredaction aka Private by Default
Sometimes you may want to redact everything on the screen, then selectively "unredact" only the parts your support agents should be able to see. This is particularly useful on applications that require a higher privacy standard or where only specific sections of the App should be visible to the agent.
To achieve this, you should return all of your application's root views via the cobrowseRedactedViews(for vc: UIViewController) delegate method.
Please note the example below may not redact all your root views as this can be application dependent.
Once you've done this, your application root views will be redacted by default and you'll be able to unredact child components to make them visible to the agents by implementing cobrowseUnredactedViews(for vc: UIViewController) in your CobrowseIODelegate class:
Alternatively, you can implement CobrowseIOUnredacted protocol in your UIViewController subclasses:
Redaction of WebView content
Your app may show web content that contains elements that you wish to redact. This can be achieved by setting the webviewRedactedViews property to an array of CSS selectors that identify the elements to be redacted.
Implement the CobrowseIO.Redacted interface on any Activity that contains sensitive views. This interface contains one method:
If making changes to your Activity classes isn't an option, we also support a delegate style method to allow you to supply this information in one place. Implement CobrowseIO.RedactionDelegate interface in your CobrowseIO.Delegate class, then you can pass redacted views for a specific Activity in a single method:
Redaction of Jetpack Compose UI
Redaction for Jetpack Compose UI is shipped in a separate library on Maven Central:
Apply Modifier.redacted() to your composable to be redacted, like so:
Redaction by default
Sometimes you may want to redact everything on the screen, then selectively "unredact" only the parts your support agents should be able to see. This is particularly useful on applications that require a higher privacy standard or where only specific sections of the App should be visible to the agent.
To achieve this, you'll need to follow the delegate implementation and ensure you pass the all your applications root views to the Cobrowse redaction delegate method:
Once you've done this, your application root views will be redacted by default and you'll be able to un-redact child components to make them visible to the agents by implementing CobrowseIO.UnredactionDelegate in your CobrowseIO.Delegate class:
Alternatively, you can implement CobrowseIO.Unredacted interface in your Activity subclasses:
Redaction of WebView content
Your app may show web content that contains elements that you wish to redact. This can be achieved by setting the webviewRedactedViews property to an array of CSS selectors that identify the elements to be redacted.
To redact an element in your RN application you can wrap it in a tag provided by the Cobrowse module:
Redaction by default
Sometimes you may want to redact everything on the screen, then selectively "unredact" only the parts your support agents should be able to see. This is particularly useful on applications that require a higher privacy standard or where only specific sections of the App should be visible to the agent.
To achieve this, you'll need to follow the delegate implementation and ensure you pass the all your applications root views to the Cobrowse redaction delegate methods for iOS and Android.
Listening for eventsOnce you've done this, your application root views will be redacted by default and you'll be able to un-redact child components to make them visible to the agents:
Redaction of WebView content
Your app may show web content that contains elements that you wish to redact. This can be achieved by setting the webviewRedactedViews property to an array of CSS selectors that identify the elements to be redacted.
Redacting views outside React Native
Finally, within React Native some packages will render in new Windows/Root Views. You can follow the same delegate implementation to identify this views and redact or unredact them by default as required. You can check the provided examples for iOS and Android which redact by default the React Native Dev menu keeping one of the options unredacted to illustrate the technique.
To redact an element in your Flutter application you can wrap it in a widget provided by the SDK:
iOS implementation
Implement the ICobrowseIORedacted interface on any UIViewController that contains sensitive views. This interface contains one RedactedViews property:
Android implementation
Implement the CobrowseIO.IRedacted interface on any Activity that contains sensitive views. This interface contains one method:
MAUI implementation
Create a new Effect which then will be used to redact certain MAUI views:
Create the following iOS-specific classes:
Android-specific classes:
Make sure the delegates you just created are passed into the Cobrowse.io SDK after the SDK is started:
Last, utilize the created effect like this:
Redaction of WebView content
Your app may show web content that contains elements that you wish to redact. This can be achieved by setting the WebViewRedactedViews property to an array of CSS selectors that identify the elements to be redacted.
2. Selector based redaction
You can use CSS like selectors to identify what elements / views should be redacted. These selectors can be defined within your application using our SDK or via the Cobrowse dashboard.
Adding selectors via the dashboard can be useful if your app is already in production and you need to redact a field retrospectively, either due to a missed redaction entry in the app build or changing requirements.
Via SDK
Via dashboard
Visit https://cobrowse.io/dashboard/settings/redaction and enter your selectors into the Web redaction / unredaction configuration.
Via SDK
For UIKit you can use the class name of any UIView, the view's integer tag value or any property on the UIView that is string representable with no additional configuration.
For SwiftUI you will need to use the cobrowseSelector(tag:, id:, classes:, attributes:) view modifier filling our the values manually.
This view can now be referenced using the selector of:
Text[accessibilityIdentifier="HELLO MESSAGE"]
Via dashboard
Visit https://cobrowse.io/dashboard/settings/redaction and enter your selectors into the iOS redaction configuration.
Via SDK
For Android Views you can use the simple name of any view class, the id of the view.
The #id must be able to be used with system android.view.View#findViewById() and android.app.Activity#findViewById() methods.
For JetPack Compose UIs you will need to use the cobrowseSelector(tag, id, attributes) modifier filling our the values manually.
This view can now be referenced using the selector of:
Text[testTag="HELLO MESSAGE"]
Via dashboard
Visit https://cobrowse.io/dashboard/settings/redaction and enter your selectors into the iOS redaction configuration.
Redaction Playground
Configuring redaction can often require deep technical involvement and coordination across multiple teams. This can make it harder to manage consistently and to adjust quickly as requirements change.
The Redaction Playground provides a centralized environment to define, preview, and apply redaction rules, so configuration can be managed in one place without code changes or application releases.
Once you have your updated redaction configuration please copy them over to your redaction settings of your Cobrowse account.
Last updated
Was this helpful?