我拥有一个网站,可以通过数据库发布问题和答案等论坛。我想加强我的代码以防止XSS和SQl注入..
对于XSS我使用了folloinf函数: 用strip_tags 用htmlspecialchars htmlentities
我的问题是:他们之间有什么区别?另外,我遇到的问题是: 1-我有一个textarea和带有默认文本的文本框 2-当使用上面的函数并且我在文本区域中输入任何测试时..输出将不会采用我在textarea中写的...它将始终采用默认值...
这就是我做的事情
$first_name = $_POST['first_name'];
$first_name = htmlspecialchars($first_name);
echo $first_name
另外,任何人都对防止SQL注入有任何想法,我根本不知道..
答案 0 :(得分:0)
直接从手册。 http://php.net/manual/en/mysqli.prepare.php
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$city = "Amersfoort";
/* create a prepared statement */
if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {
/* bind parameters for markers */
$stmt->bind_param("s", $city);
/* execute query */
$stmt->execute();
/* bind result variables */
$stmt->bind_result($district);
/* fetch value */
$stmt->fetch();
printf("%s is in district %s\n", $city, $district);
/* close statement */
$stmt->close();
}
/* close connection */
$mysqli->close();
?>
对于XSS,strip_tags会这样做。除非有人破解您的FTP密码并且他们进入并编辑您的文件,或者如果您允许他们上传漏洞,请确保您在上传文件夹中禁用脚本执行。
答案 1 :(得分:0)
要防止XSS,您应该使用不同的过滤规则,具体取决于您输出的区域。
hmtlentities
(将<
翻译为<
)很好,但将不安全的变量输出到<head>
或<script>
或<style>
标签;
另一个棘手的领域是像<input onMouseDown=""
这样的标记属性,因为人们可以破坏你的字符串并添加他们自己的属性(就像SQL注入一样)。
以下地方深入讨论了这个问题:
http://adamjonrichardson.com/2012/02/01/improving-xss-cross-site-scripting-prevention-in-four-simple-steps/ https://www.golemtechnologies.com/articles/prevent-xss
您还可以考虑使用PHP的filter_var函数,非常有用。