当前位置:  开发笔记 > 编程语言 > 正文

输入是URL,如何保护它免受xss

如何解决《输入是URL,如何保护它免受xss》经验,为你挑选了1个好方法。

我有一个表单文本字段,接受一个网址.提交表单时,我使用适当的反sql注入将此字段插入数据库.我的问题是关于xss.

此输入字段是一个网址,我需要在页面上再次显示它.如何在进入数据库的过程中保护它免受xss的影响(我认为没有必要,因为我已经处理了sql注入)并且在离开数据库的路上?

让我们假装我们这样,我正在简化它,请不要担心SQL注入.之后我会从哪里出发?

$url = $_POST['url'];

谢谢



1> Drew Stephen..:

假设这将被投入的HTML内容(如间或之间

),则需要以编码5个特殊XML字符(&,<,>,","),和OWASP建议包括斜杠(/)作为PHP内置,htmlentities()将为您完成第一部分,简单的str_replace()可以做斜杠:

function makeHTMLSafe($string) {
    $string = htmlentities($string, ENT_QUOTES, 'UTF-8');
    $string = str_replace('/', '/', $string);
    return $string;
}

但是,如果您要将受污染的值放入HTML属性(例如href=an 的子句)中,则需要对不同的字符集进行编码([space]%*+, - /; < => ^和|) - 您必须双引号HTML属性:

function makeHTMLAttributeSafe($string) {
    $scaryCharacters = array(32, 37, 42, 43, 44, 45, 47, 59, 60, 61, 62, 94, 124);
    $translationTable = array();
    foreach ($scaryCharacters as $num) {
        $hex = str_pad(dechex($num), 2, '0', STR_PAD_LEFT);
        $translationTable[chr($num)] = '&#x' . $hex . ';';
    }

    $string = strtr($string, $translationTable);
    return $string;
}

最后一个问题是非法的UTF-8字符 - 当传送到某些浏览器时,格式错误的UTF-8字节序列可能会突破HTML实体.为了防止这种情况,只需确保您获得的所有UTF-8字符都有效:

function assertValidUTF8($string) {
    if (strlen($string) AND !preg_match('/^.{1}/us', $string)) {
        die;
    }

    return $string;
}

u正则表达式上的修饰符使其成为Unicode匹配正则表达式.通过匹配单个分层次结构,.我们可以确保整个字符串都是有效的Unicode.

由于这完全取决于上下文,因此最好在最近可能的时刻执行任何此编码 - 就在将输出呈现给用户之前.在这种练习中也可以很容易地看到你错过的任何地方.

OWASP提供有关其XSS预防备忘单的大量信息.


啊..为了回答我自己的问题,OWASP推荐这个,因为如果没有引用属性*需要*.我建议改为引用属性.
推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有