我遇到了问题。我一进入这个小f **** r - > '< - 在我的textarea中通过AJAX发送到数据库,它停止工作。所以如果我输入:
我是一个小侏儒,我很高兴见到你。拥抱我!
数据库只会收到:
我是一个小侏儒,我
那么..我可以将页面上的所有textareas限制为A-Z +ÅÄ+ +。 ,+其他经常使用的字符,不会破坏我的东西?我正在使用onchange
用于AJAX请求,另一个用于keyup
的eventlistener使其可以在Safari上运行,如果这对任何人都重要的话!
SQL注入漏洞,得到了它。我很害怕,还有事可做。感谢迄今为止的所有答案。
答案 0 :(得分:2)
我可以看到你刚开始,这很棒!你总是要找到一个学习新东西的bug,而你现在正在学习SQL注入。如果我可以提出建议,你最好从PHP The Right Way开始,它会帮你装车。
您的PHP脚本(将此数据插入数据库)未正确清理。
如果没有看到相关代码,我们就无法做多少事情。但我认为你使用mysql_*
/ mysqli_*
函数?我们前一个已弃用,自PHP7起删除了!
您应该开始学习以下两种预处理语句类型之一:
根据我的假设,您希望转义字符串:
$data = mysql_real_escape_string($_POST['data']);
尽管如此,仍有办法解决上述问题;您的数据库仍然可以通过SQL注入被攻击,这不是您想要的。
作为noted by Armadan,为了支持我上面的陈述,mysql_real_escape_string()
在某些情况下仍然可以通过,请阅读以下内容:
根据您提供的代码,您可以使用prepare()
和execute()
:
if(isset($_GET['comment1'])) {
if($mysqli = connect_db()) {
$insertcomment1 = $_GET['comment1'];
$stmt = $mysqli->prepare("UPDATE result SET c1=?");
if ( false===$stmt ) {
die('prepare() failed: ' . htmlspecialchars($mysqli->error));
}
$stmt->bind_param('s', $insertcomment1);
// execute
if(!$stmt->execute()){
die('execute() failed: ' . htmlspecialchars($mysqli->error));
}
// handle the rest here.
}
}
你会做上面这样的事情。您最好阅读以下有关使用MySQLi准备好的语句的内容: