通过标准化从文本输入中检测和消除 XSS (跨站点脚本)攻击
跨网站脚本攻击是一种利用网络应用中的漏洞来掠夺用户信息的威胁形式。利用恶意程式码,攻击者可透过一个通常值得信赖的网页接达不同用户,并接达用户在浏览器登入的任何资料,包括 cookies 及其他敏感资料。这些类型的攻击可能发生在 web 程序接受用户输入而不进行验证,然后在其输出中使用它的地方。
采取一切必要的措施来保护你的用户是很重要的,尤其是在 XSS 攻击的情况下,因为用户可能只知道他们使用你的网站,而不是恶意的行为者在威胁他们。这可能会损害你的网站的声誉,因为用户会将任何问题与其用户联系起来,并可能不愿意返回。
下面的 api 不仅可以检查和验证任何输入文本,还可以通过标准化移除任何检测到的攻击,从而防止 XSS 攻击。实现这些 api 的目的不仅是为了保护您的用户,也是为了保护您企业的合法性和声誉。
要使用以下任何一个 api,首先需要使用 Maven 安装 SDK 库,在 pom.xml 中的存储库中添加一个 Jitpack 引用:
<repositories> <repository> <id>jitpack.io</id> <url>https://jitpack.io</url> </repository> </repositories>
然后,我们可以添加一个对依赖项的引用:
<dependencies> <dependency> <groupId>com.github.Cloudmersive</groupId> <artifactId>Cloudmersive.APIClient.Java</artifactId> <version>v3.54</version> </dependency> </dependencies>
第一个 API 将检查针对 XSS 攻击的任何面向用户的文本输入。这对于在威胁实施之前发现它们是有用的。要运行这个 API,如上所示安装 SDK 并调用函数:
//Import classes: //import com.cloudmersive.client.invoker.ApiClient; //import com.cloudmersive.client.invoker.ApiException; //import com.cloudmersive.client.invoker.Configuration; //import com.cloudmersive.client.invoker.auth.*; //import com.cloudmersive.client.TextInputApi; ApiClient defaultClient = Configuration.getDefaultApiClient(); // Configure API key authorization: Apikey ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey"); Apikey.setApiKey("YOUR API KEY"); // Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null) //Apikey.setApiKeyPrefix("Token"); TextInputApi apiInstance = new TextInputApi(); String value = "value_example"; // String | User-facing text input. try { XssProtectionResult result = apiInstance.textInputCheckXss(value); System.out.println(result); } catch (ApiException e) { System.err.println("Exception when calling TextInputApi#textInputCheckXss"); e.printStackTrace(); }
这将返回原始输入、规范化结果、验证是否成功以及输入是否包含 XSS 攻击。为了确保这个 API 正常工作,你需要检查某些要求是否得到满足:
1/正确地输入了文本字符串
2/你已经输入了你的 API 密钥。这可以在 Cloudmersive 网站上免费获取,通过我们的 API 库提供每月800次的调用
第二个 API 更进一步,通过检测和删除任何来自文本输入的 XSS 攻击。这通过规范化来执行,规范化从文本字符串中删除所有重复或无法识别的脚本。安装 SDK,开始运行 API,然后调用函数:
//Import classes: //import com.cloudmersive.client.invoker.ApiClient; //import com.cloudmersive.client.invoker.ApiException; //import com.cloudmersive.client.invoker.Configuration; //import com.cloudmersive.client.invoker.auth.*; //import com.cloudmersive.client.TextInputApi; ApiClient defaultClient = Configuration.getDefaultApiClient(); // Configure API key authorization: Apikey ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey"); Apikey.setApiKey("YOUR API KEY"); // Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null) //Apikey.setApiKeyPrefix("Token"); TextInputApi apiInstance = new TextInputApi(); String value = "value_example"; // String | User-facing text input. try { XssProtectionResult result = apiInstance.textInputProtectXss(value); System.out.println(result); } catch (ApiException e) { System.err.println("Exception when calling TextInputApi#textInputProtectXss"); e.printStackTrace(); }
这将返回与前一个 API 类似的输出,但是删除了所有检测到的 XSS 攻击。
最终的 API 执行的函数与前面的两个示例相同,但可以用于作为一个批处理检查多个输入。这个 API 的参数应该是按照首选操作顺序的输入文本项的列表。像之前的两个 API 一样安装 SDK 库,然后调用函数:
// Import classes: //import com.cloudmersive.client.invoker.ApiClient; //import com.cloudmersive.client.invoker.ApiException; //import com.cloudmersive.client.invoker.Configuration; //import com.cloudmersive.client.invoker.auth.*; //import com.cloudmersive.client.TextInputApi; ApiClient defaultClient = Configuration.getDefaultApiClient(); // Configure API key authorization: Apikey ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey"); Apikey.setApiKey("YOUR API KEY"); // Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null) //Apikey.setApiKeyPrefix("Token"); TextInputApi apiInstance = new TextInputApi(); XssProtectionBatchRequest value = new XssProtectionBatchRequest(); // XssProtectionBatchRequest | User-facing text input. try { XssProtectionBatchResponse result = apiInstance.textInputCheckXssBatch(value); System.out.println(result); } catch (ApiException e) { System.err.println("Exception when calling TextInputApi#textInputCheckXssBatch"); e.printStackTrace(); }
这将返回与前两个 api 组合在一起的相同输出,每个字符串按输入顺序获得一个结果。