Tools to find perpetrators and abuse material

Facts

Project partner:
NetClean

Where:
Gothenburg, Sweden

Contact:
Susanne Drakborg
[email protected]

Rapid technological development has made it possible for people to gain access to vast amounts of child sexual abuse material. Research shows that online abuse is just as traumatic as abuse that takes place offline. Knowing that images and videos of the abuse continues to be shared online, creates immense suffering among the affected children. Childhood’s priority is to stop the distribution of child sexual abuse material and identify perpetrators.

As early as 2003, Childhood invested in what would later become the company NetClean.  NetClean was initially an unestablished player with the pioneering idea that technical solutions could contribute to combatting child sexual abuse. Childhood provided a small financial contribution and extensive support in terms of advice, knowledge and a widespread network. Today, NetClean is a world leader in technical solutions to stop the spread of child abuse material online. Multinational companies, authorities and internet service providers (ISPs) around the world now use their technology.

Technical software connected to work computers

The software that NetClean developed detects when someone accesses files that contain child sexual abuse material. NetClean addresses companies that are interested in connecting all their work computers to the software. If someone downloads, opens or in other ways handles a file that previously has been classified as illegal by the police database, NetClean alerts the employer. To have child sexual abuse images and videos in one’s possession is in itself a crime. In addition, there is a risk that the person commits or will commit physical child sexual abuse and will distribute the material. Every year NetClean publishes an annual, internationally respected report that highlights various aspects of the fight against child sexual abuse online.

Photo: private

.acf-map { width: 100%; height: 400px; /*border: #ccc solid 1px;*/ /*margin: 20px 0;*/ } // Fixes potential theme css conflict. .acf-map img { max-width: inherit !important; } (function( $ ) { /** * initMap * * Renders a Google Map onto the selected jQuery element * * @date 22/10/19 * @since 5.8.6 * * @param jQuery $el The jQuery element. * @return object The map instance. */ function initMap( $el ) { // Find marker elements within map. var $markers = $el.find('.marker'); // Create gerenic map. var mapArgs = { zoom : $el.data('zoom') || 16, mapTypeId : google.maps.MapTypeId.ROADMAP }; var map = new google.maps.Map( $el[0], mapArgs ); // Add markers. map.markers = []; $markers.each(function(){ initMarker( $(this), map ); }); // Center map based on markers. centerMap( map ); // Return map instance. return map; } /** * initMarker * * Creates a marker for the given jQuery element and map. * * @date 22/10/19 * @since 5.8.6 * * @param jQuery $el The jQuery element. * @param object The map instance. * @return object The marker instance. */ function initMarker( $marker, map ) { // Get position from marker. var lat = $marker.data('lat'); var lng = $marker.data('lng'); var latLng = { lat: parseFloat( lat ), lng: parseFloat( lng ) }; // Create marker instance. var marker = new google.maps.Marker({ position : latLng, map: map }); // Append to reference for later use. map.markers.push( marker ); // If marker contains HTML, add it to an infoWindow. if( $marker.html() ){ // Create info window. var infowindow = new google.maps.InfoWindow({ content: $marker.html() }); // Show info window when marker is clicked. google.maps.event.addListener(marker, 'click', function() { infowindow.open( map, marker ); }); } } /** * centerMap * * Centers the map showing all markers in view. * * @date 22/10/19 * @since 5.8.6 * * @param object The map instance. * @return void */ function centerMap( map ) { // Create map boundaries from all map markers. var bounds = new google.maps.LatLngBounds(); map.markers.forEach(function( marker ){ bounds.extend({ lat: marker.position.lat(), lng: marker.position.lng() }); }); // Case: Single marker. if( map.markers.length == 1 ){ map.setCenter( bounds.getCenter() ); // Case: Multiple markers. } else{ map.fitBounds( bounds ); } } // Render maps on page load. $(document).ready(function(){ $('.acf-map').each(function(){ var map = initMap( $(this) ); }); }); })(jQuery);