php 项目开发安全的问题

刚开始做开发,对项目的开发的安全问题比较担心.
表单post或者get提交的时候,以最简单的一个添加文章代码举例:

<form action="" method="post">
    <input type="text" name="title">
    <textarea name="content"></textarea>
    <input type="submit" value="提交">
</form>

只要是varchar或text的表单都存在js脚本和html注入的可能,那不是需要所有的post,get数据都要进行安全过滤吗?这样做的开销是不是有点大?(前台的验证,总觉得不放心,js很容易被禁用或绕过的吧)

还有进一步,如果使用富文本编辑器,添加的时候进行过滤或转义存入数据库,在编辑时取出那么html部分的样式不就乱了吗?

有简单的xss攻防实例能参考一下不,不是太理解xss,是不是所有的文本框中都可以输入js代码,从而注入到数据库中,谢谢了

阅读 3.9k
4 个回答

php有对数据进行过滤的函数,而且有高级过滤验证,看文档

$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST")
{
  $name = test_input($_POST["name"]);
  $email = test_input($_POST["email"]);
  $website = test_input($_POST["website"]);
  $comment = test_input($_POST["comment"]);
  $gender = test_input($_POST["gender"]);
}

function test_input($data)
{
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}

防止SQL注入,除了上面的哥们的过滤之外,还可以考虑使用PDO的数据预处理

链接http://www.runoob.com/php/php...

$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);

// 插入一行
$name = 'one';
$value = 1;
$stmt->execute();

关于XSS攻击,多出现在那种用户能提交表单的网站。 举个例子 我在一个 无限制 的表单里提交了一个(无限制 无过滤,切对外的表单)

<script>
window.onload = function(){
     setInterval(alert("该网站有毒 该网站有毒!"),1000);
}
</script>

如果我语法没错的话。。这东西要是注入到数据库里被展现出来。简直就是丧心病狂。

对了 如果你真的要这么干的话记得压缩一下代码 以免被nl2br这样的函数给破坏了

<script>window.onload = function(){setInterval(alert("该网站有毒 该网站有毒!"),1000);}</script>

艾玛 技术水平不过关啊。。这个计时器就没用,那个大神来给解释一下。是不是因为触发的太早了?

pdo预处理、插入url要谨慎,script标签识别过滤!

function test_input($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}

楼上是正解,很多框架也是这样过滤危险xss

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题