Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 针对XSS的安全保护-用户提供url的一部分_Php_Mysql_Xss - Fatal编程技术网

Php 针对XSS的安全保护-用户提供url的一部分

Php 针对XSS的安全保护-用户提供url的一部分,php,mysql,xss,Php,Mysql,Xss,我明白了为什么这是不好的,并且必须使用htmlspecialchars来防止某些xss漏洞: <?php $url = '<plaintext>'; echo $url;?> 像这样: <?php $url = '<plaintext>'; htmlspecialchars($url, ENT_QUOTES, "UTF-8"); echo $url;?> 在我的数据库中,我只存储用户提供的文件名。(我相信随着我对这门学科的进一步了解,情

我明白了为什么这是不好的,并且必须使用htmlspecialchars来防止某些xss漏洞:

<?php $url = '<plaintext>';
echo $url;?>

像这样:

<?php $url = '<plaintext>';
htmlspecialchars($url, ENT_QUOTES, "UTF-8");
echo $url;?>

在我的数据库中,我只存储用户提供的文件名。(我相信随着我对这门学科的进一步了解,情况会有所改变)

但我想知道的是,下面的内容是否真的对XSS起到了保护作用?与前一个案例相比,它的脆弱性是否更小

我尝试过注入带有和不带有htmlspecialchars的脚本标记 在这两种情况下,它似乎都不起作用。脚本代码无法执行

安全吗?htmlspecialchars是适合这项工作的工具吗?我怎样才能做得更好

$sql['image']是从我的数据库中获取的,下面是显示图像的代码

<?php $url = "/images/" . $sql['image'] . ".jpg";
$url = htmlspecialchars($url, ENT_QUOTES, "UTF-8");?>
<img src="<?php echo $url;?>">

">
产出:

<img src="/images/test.jpg">

原则上,您永远不能信任任何用户输入。如果
$sql['image']
将直接或间接由用户提供,则在该字符串的开头和结尾添加常量无关紧要。无论哪种方式,您都必须依赖
htmlspecialchars()
不包含任何允许注入脚本的错误

在这种情况下,要真正提高安全性,您必须采取更严厉的措施。一种流行的方法是自己分配文件名,例如对文件内容进行哈希运算,并使用该哈希值而不是原始文件名来存储文件。
md5()
sha1()
在这方面很有用

此外,假设用户提供了您正在存储其文件名的图像,您也必须确保这些图像不能用于完成工作。例如,用户可能会上传带有嵌入式脚本的SVG,而不是JPEG,从而完全避免对文件名本身的任何验证或损坏