Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.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
Javascript 试图将字符串“alert”(“boo”)插入MySQL数据库,但产生403错误_Javascript_Php_Mysql - Fatal编程技术网

Javascript 试图将字符串“alert”(“boo”)插入MySQL数据库,但产生403错误

Javascript 试图将字符串“alert”(“boo”)插入MySQL数据库,但产生403错误,javascript,php,mysql,Javascript,Php,Mysql,我正在尝试将javascript源代码作为文本保存到mysql表中。我使用中文本作为数据库中的数据类型。测试时,我注意到如果文本包含alert(),则无法成功保存保存到数据库的文本区域内的任意位置。我理解XSS漏洞,并认为这可能是服务器提供商的内置预防措施,因此我甚至尝试将字符串保存为base64编码。当我试图保存源文本时,仍然收到403禁止的错误 403禁止错误的描述是:您没有访问/此服务器的权限。 $string1 = 'console.log("test");'; //successful

我正在尝试将javascript源代码作为文本保存到mysql表中。我使用中文本作为数据库中的数据类型。测试时,我注意到如果文本包含
alert(),则无法成功保存保存到数据库的文本区域内的任意位置。我理解XSS漏洞,并认为这可能是服务器提供商的内置预防措施,因此我甚至尝试将字符串保存为base64编码。当我试图保存源文本时,仍然收到403禁止的错误

403禁止错误的描述是:
您没有访问/此服务器的权限。

$string1 = 'console.log("test");';
//successfully saves when attempting to insert into database

$string2 = 'alert("boo");';
//error 403 Forbidden when attempting to insert into database

$string3 = 'alert("boo");';
$encstr = base64_encode($string3);
//error 403 Forbidden when attempting to insert into database
有没有解决或规避的办法?这是我正在使用的一个新的服务提供商(namecheap),在我的digitalocean VPS上运行相同的代码时,我没有遇到此错误

更新以显示源代码:

<?php
require("conn.php");

if(isset($_POST["savecode"])){
    $getuniqueid = uniqid();
    $gettime = time();

    $getscriptcode = $_POST["scriptcode"];
    $sanitizescriptcode = mysqli_real_escape_string($conn, $getscriptcode);
    //$sanitizescriptcode = htmlspecialchars($sanitizescriptcode);
    $sanitizescriptcode = base64_encode($sanitizescriptcode);
    $insertscript = "INSERT INTO scriptcode (`postid`,`content`,`ttime`) VALUES('$getuniqueid','$sanitizescriptcode','$gettime')";
    mysqli_query($conn, $insertscript)or die("Fatal error attempting to save JavaScript");

    header("Location: ?id=".$getuniqueid);
    exit();

}
?>
<!DOCTYPE html>
<html>
<body>
<div id="hbanner"><form method="post"><button type="submit" name="savecode" id="savecode" class="btn btn-info">SAVE</button></div>
<textarea id="scriptcode" name="scriptcode" class="codeinput"></textarea></form>

</body>
</html>
name便宜的使用,这是一个Web应用程序防火墙(或WAF)。许多过滤器都和防止跨站点脚本有关。(注意:他们的支持可以在帐户级别禁用它,也可以为您列出某些规则的白名单,但您必须直接与他们联系。他们还可以拉日志来告诉您哪些过滤器被点击。)

有可能base64编码版本实际上遇到了不同的规则,因为恶意软件通常使用该规则来混淆其恶意代码。另一种可能性是,这是POST请求中的脚本压力,因此您可以在使用JavaScript(使用
window.btoa(data)
)提交脚本之前尝试base64编码,然后在PHP端使用
base64\u decode
对其进行解码

您可以通过注释掉所有代码并查看在提交表单时是否仍然得到
403
来测试它是否在MySQL级别

如果是SQL级别的,您可以尝试传递一个包含一些已知分隔符的分块字符串,这些分隔符不会出现在您的字符串中,然后在SQL中替换掉它。例如,类似这样的内容:

$insertscript = "INSERT INTO scriptcode (`postid`,`content`,`ttime`) VALUES('$getuniqueid',REPLACE('" . mysqli_real_escape_string($conn,chunk_split($_POST['scriptcode'],4,"†")) . "','†',""),'$gettime')";
在本例中,
chunk\u split
每隔4个位置插入一个特殊字符,然后MySQL
REPLACE
函数在查询发送到数据库服务器后将其剥离出来


请记住,这是一个非常粗糙且有点低效的方法,我只是想提供一些不涉及支持的潜在解决方法。

您使用哪种框架?在这种情况下没有框架。只需使用带有
mysqli_query
和SQL语句
“插入脚本代码(
content
)值(“$string2”)的普通PHP即可
$string2
在输入db之前将被转义,并且htmlspecialchars。请共享您的代码好吗?完整版本。已更新以显示其他源。它与将数据插入数据库的方式无关。插入是可以的。你使用调试器吗?啊,好的,所以它有一个保护功能。我不介意使用delimeter进行黑客攻击,但我会尝试一些解决方法,或者直接回到我的副总裁那里,在那里我有完全的控制权。@m1xolyd1一笔不错的交易。如果这有助于您追踪问题的哪一部分或解决问题,请随时接受答案,如果没有,请发布更新,也许我们可以提出更多想法。